【问题标题】:Android Splash Screen before black screen黑屏前的Android启动画面
【发布时间】:2012-06-10 09:09:34
【问题描述】:

我想在 onCreate() 方法中初始化所有内容时显示启动画面,但我需要将内容绘制到屏幕上的组件也在初始化,因此当我启动应用程序时和之后出现黑屏onCreate() 方法已经完成,然后只绘制第一个屏幕。我想要一个启动画面,而不是黑屏。

这是我在 onCreate 方法中的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Acquire a wakeLock to prevent the phone from sleeping
        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");

        // Setup all the Game Engine components 
        gameEngineLog = new WSLog("WSGameEngine");
        gameEngineLog.setLogType(this.gameEngineLogType);
        gameLog = new WSLog(this.gameLogTAG);
        gameLog.setLogType(this.gameLogType);
        io = new FileIO(this, getAssets());
        audio = new Audio(this);
        wsScreen = new WSScreen(this, this.screenResizeType, this.customTopYGap, this.customLeftXGap, this.gameScreenWidth, this.gameScreenHeight);
        graphics = new Graphics(this, wsScreen.getGameScreen(), wsScreen.getGameScreenextended());
        renderView = new RenderView(this, wsScreen.getGameScreen(), wsScreen.getGameScreenextended(), FPS, maxFrameskippes);
        input = new Input(this, renderView, logGameEngineInputLog);
        setContentView(renderView);

        if(useOfAnalytics == true) {
            getGameEngineLog().w(classTAG, "Analytics has been enabled");
            analytics = new Analytics(this);
        }

        // Check that the developer has initialized the assets
        if(this.assets == null) {
            this.gameEngineLog.w(classTAG, "The assets for the game haven't been defined!");
        }

    }

如何实现闪屏,避免一开始就黑屏?

【问题讨论】:

    标签: java android splash-screen


    【解决方案1】:

    为这个初始屏幕创建一个 XML 布局,并在你的 super.onCreate() 之后将其设置为内容视图:

    super.onCreate(savedInstanceState);
    setContentView (R.layout.splash_screen);
    

    应该够了。在调用您的 setContentView(renderView) 之前,它将显示此初始屏幕。

    【讨论】:

    • setContentView(R.layout.splashscreen); // 做工作 setContentView(view);第一个 setContent 视图无效。
    • 什么意思?你看不到启动画面吗?也许加载时间太小以至于无法察觉。在这种情况下,您需要使用另一个答案中所说的 postDelayed 方法。
    • 我开始工作了,一切都解决了。我相信 setContentView 只有在 onCreate() 方法完成执行后才会生效。
    【解决方案2】:

    //避免UI线程中的耗时工作,但如果这与UI本身有关,则执行以下操作

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
    
                setContentView(R.layout.first_splash_lauoy);
    
                new Handler().postDelayed(new Runnable() {
    
                    public void run() {
                      //Your time consuming work 
                      //with spiiner(if needed) & setContentView(<finalView>)
                      }, 1000);
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2021-09-17
      • 2019-05-07
      相关资源
      最近更新 更多