Android SplashScreen

JaV*_*did 80 android splash-screen

我正在开发一个应用程序,它基本上在应用程序本身的开始下载大量数据并将其显示在ListActivity中.我打算做的是显示启动画面,直到数据加载完毕.

直到现在我的所有尝试都是徒劳的.我试过anddev.org提到的方法,但我的问题是主Activity应该开始但是Splash Screen应该是可见的,直到我填充我的ListActivity.所以简而言之,我必须完成以下步骤:

  1. 开始我的主要活动.
  2. 显示启动画面.
  3. 继续在后台运行该过程.
  4. 处理完成后退出Splashscreen并显示主List.

希望你明白它是什么样的....

Mar*_*k B 89

问题很可能是你在所有正在完成的工作中运行启动画面(某种类型的Dialog,例如我假设的ProgressDialog).这将使得初始屏幕的视图不被更新,这可以使其甚至不被显示到屏幕上.您需要显示启动屏幕,启动AsyncTask实例以下载所有数据,然后在任务完成后隐藏启动屏幕.

所以你的Activity的onCreate()方法只会创建一个ProgressDialog并显示它.然后创建AsyncTask并启动它.我会将AsyncTask作为主Activity的内部类,因此它可以将已下载的数据存储到Activity中的某个变量中,并在其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();
             }
         }
    }    
}
Run Code Online (Sandbox Code Playgroud)

显然有一些你需要填写的部分,但这个代码应该运行并给你一个很好的起点(原谅我,如果有代码错误,我无法访问Android SDK,因为我正在键入此目前).

这里这里可以找到关于Android中AsyncTasks主题的一些更好的阅读.


Raa*_*nan 59

仅供参考,这是我发现制作启动画面的最佳方式:http: //android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html

我正在搜索这个问题很长一段时间,来自orroids docs ..如果你想避免那些黑屏,你需要用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>
Run Code Online (Sandbox Code Playgroud)

并将此主题设置为您主要活动的主题...... TADA,第一秒的闪屏.

如果你想要一个复杂的背景,而不仅仅是一个可以拉伸填充的图像,你可以使用Drawables,这里是一个图层列表的例子,它将使徽标以黑色背景为中心:

<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>
Run Code Online (Sandbox Code Playgroud)

  • @deko item name="android:windowBackground" 可以是固定颜色或图像,也可以是 xml drawable,如放置在 res/drawable 文件夹中的图层列表。您可以在此处阅读有关 Drawable 的信息:http://developer.android.com/guide/topics/resources/drawable-resource.html (2认同)