如何在后台加载活动时显示带动画的启动画面。 (机器人)

时间:2017-03-19 20:03:48

标签: java android android-animation splash

我的Android应用的MainActivity需要很长时间才能加载。所以,我想创建一个启动画面,直到MainActivity完成加载即表示:onCreate MainActivity方法的所有工作都已完成,之后启动画面必须关闭,MainActivity启动。此外,Splash Screen上还有动画。

启动画面的onCreate方法是:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    ImageView imageView = (ImageView) findViewById(R.id.circle);
    final Animation startRotateAnimation = AnimationUtils.loadAnimation(this, R.anim.android_rotate_animation);
    startRotateAnimation.setRepeatCount(Animation.INFINITE);
    imageView.startAnimation(startRotateAnimation);

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

            Intent i = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(i);
            // close this activity
            finish();
        }
    }, SPLASH_TIME_OUT);

}

SplashScreen将在SPLASH_TIME_OUT指定的时间之后完成上述代码,这是一个固定的整数常量。

android_rotate_animation.xml 是:

<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000"
android:startOffset="0"
/>

SplashScreen 完成加载之前,我应该如何才能显示 MainActivity

由于项目限制,我无法将多个图像文件用于动画。

SplashScreen的行为就像加载屏幕一样。动画将在其上播放(如加载栏),直到MainActivity完成加载,然后MainActicity将启动。

2 个答案:

答案 0 :(得分:1)

要实现这一点,您可以将数据加载移动到SplashScreenActivity并在加载数据时启动MainActivity,或者将Splash-View移动到MainActivity,在那里您最初只显示Splash-View,直到数据为止加载然后隐藏该视图或将其替换为MainActivty的实际视图。

编辑我建议您使用AsyncTask异步执行加载。您可以在onProgressUpdate()方法中更新进度条,当工作完成后,在onPostExecute()中,您可以隐藏进度条并显示正常布局。

答案 1 :(得分:0)

试试这个 为启动画面创建自定义主题

<style name="Animation">
    <item name="android:windowEnterAnimation">@anim/rotate</item>
    <item name="android:windowFrame">@null</item>
</style>
<!-- Animation for splash screen -->
<style name="DialogSlideAnim">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowAnimationStyle">@style/Animation</item>
</style>

并将主题应用于初始屏幕

setTheme(R.style.DialogSlideAnim)