Android的闪屏Android的闪屏(Android SplashScreen)

2019-05-08 20:49发布

我正在开发基本上在应用程序本身的开始下载大量的数据,并将其显示在ListActivity的应用程序。 我正打算做的是显示开机画面,直到数据被加载。

到现在为止我所有的努力是徒劳的。 我试图anddev.org提到的方法,但我的问题是,主要的活动应该开始,但直到我填充我ListActivity闪屏应该是可见的。 因此,在短期我必须要经过以下步骤:

  1. 开始我的主要活动。
  2. 显示启动画面。
  3. 继续运行在后台的进程。
  4. 退出闪屏处理完毕时,并显示在主列表。

希望你明白这就像....

Answer 1:

问题是最有可能您正在运行闪屏(某种形式的对话 ,如ProgressDialog在同一个线程我假设)作为正在开展的各项工作。 这将保持被更新的闪屏,它可以保持它甚至还让显示在屏幕上的视图。 你需要显示启动画面,揭开序幕的一个实例的AsyncTask去下载所有数据,然后隐藏启动画面,一旦任务完成。

所以,你的活动的onCreate()方法将简单地创建一个ProgressDialog和表现出来。 然后创建的AsyncTask并启动它。 我会做的AsyncTask一个内部类的主要活动,因此它可以存储已下载到你的活动的一些变量的数据,并在其onPostExecute()方法关闭ProgressDialog。

不知道怎么了阐述,而不只是显示的代码,所以在这里它是:

public class MyActivity extends Activity {
    private ProgressDialog pd = null;
    private Object data = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);

        // Start a new thread that will download all the data
        new DownloadTask().execute("Any parameters my download task needs here");
    }

    private class DownloadTask extends AsyncTask<String, Void, Object> {
         protected Object doInBackground(String... args) {
             Log.i("MyApp", "Background thread starting");

             // This is where you would do all the work of downloading your data

             return "replace this with your data object";
         }

         protected void onPostExecute(Object result) {
             // Pass the result data back to the main activity
             MyActivity.this.data = result;

             if (MyActivity.this.pd != null) {
                 MyActivity.this.pd.dismiss();
             }
         }
    }    
}

显然,有一些您需要填写在那里片,但是这个代码应该运行,给你一个很好的起点(原谅我,如果有一个代码错误,我没有进入Android SDK,因为我打字目前)。

在AsyncTasks在Android的主题有些更良好的阅读可以发现这里和这里 。



Answer 2:

仅供参考,这是我发现做一个闪屏的最佳方式: http://android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html

我在寻找这个相当长的一段,从机器人文档..如果你想避免那些黑色的屏幕上,你需要创建windowBackground主题如此:

<resources>
    <style name="Theme.Shelves" parent="android:Theme">
        <item name="android:windowBackground">@drawable/background_shelf</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

并将此作为主题从第一第二的主题为您的主要活动...... TADA,闪屏。

如果你想有一个复杂的背景,而不是只是一个形象,将被拉伸以填补你可以使用绘图资源,这里是一个层列表,将继续与黑色背景为中心的标志的例子:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@color/black">
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/logo"
            android:tileMode="disabled" >
        </bitmap>
    </item>
</layer-list>


Answer 3:

闪屏例子:

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

}


Answer 4:

  1. 开始我的主要活动。
  2. 显示启动画面。
  3. 继续运行在后台的进程。
  4. 退出闪屏处理完毕时,并显示在主列表。

我试过这种方式,但问题是; 它会启动闪屏活动之前显示的主要活动。

我做了这种方式:

  1. 启动闪屏
  2. 当过程被完成后,启动了“主要活动”
  3. 不要忘了处理后退按钮,所以应该关闭应用程序IST将在主要活动被按下。 否则,将返回到初始屏幕(环)

我的问题是如何禁用按菜单按钮“显示启动画面活动菜单”。

编辑:

禁用显示菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // getMenuInflater().inflate(R.menu.activity_main, menu);
    return false;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {       
    // return super.onMenuItemSelected(featureId, item);
    return false;
}


文章来源: Android SplashScreen