cocos2d-lua android解决启动时因为资源加载而黑屏的问题

百里胜泫
2023-12-01

《清宫Q传》iOS版本已经趋于稳定,这几日开始全力攻克android,之前一直没有android的开发经验,这次下定决心要点亮技能树了。

昨天遇到了一个问题:

游戏启动后黑屏 –> 持续4~5秒钟 –> 显示游戏首屏

这显然是不能接受的。

百度了下,有人提供的解决办法是:

  1. 添加splash activity,将其作为启动的activity
  2. splash activity设置背景图
  3. 延迟N秒钟之后启动首屏的activity

同时为了让切换的时候不出黑屏,还可以设置一些style,比如让首屏的activity的背景为透明的,这样在切换的时候就一直显示splash activity的背景图了。

亲测下来这些并没有什么卵用╮(╯▽╰)╭。

还是自己来吧。

拿手机对着logcat看了半天,发现黑屏的时间耗在资源加载上了,等到资源加载完,才显示UI。

那么等等,是不是可以在activity创建的时候,先显示一个全屏的图片,类似iOS的launch image,等到资源加载好了,该显示「正常」的界面的时候,再把这个图片去掉。

听上去好有道理╰( ̄▽ ̄)╮。

来试试吧!

// AppActivity.java

public class AppActivity extends Cocos2dxActivity {

protected static Handler mUIHandler;
private static ImageView img = null;

// 创建一个ImageView,splash是闪屏图片
protected ImageView createLaunchImage() {
    img = new ImageView(this);
    img.setImageResource(R.drawable.splash);
    return img;
}

// 当资源加载好了之后要删除之前创建的imageView
// 否则一直会在界面上显示的;-)
public static void removeLaunchImage() {
    mUIHandler.post(new Runnable() {
        @Override
        public void run() {
            if (img != null) {
                img.setVisibility(View.GONE);
            }
        }
    });
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUIHandler = new Handler();
    // 显示launch image 遮住「黑屏」
    addContentView(createLaunchImage(), 
        new WindowManager.LayoutParams(
            WindowManager.LayoutParams.FILL_PARENT, 
            WindowManager.LayoutParams.FILL_PARENT));
    ...
}

亲测有效<( ̄▽ ̄)> 哇哈哈…

 类似资料: