【问题标题】:How to show a Splash Screen with Animation while activity is loading in background. (Android)如何在后台加载活动时显示带有动画的启动画面。 (安卓)
【发布时间】:2017-03-19 20:03:48
【问题描述】:

我的 Android 应用程序的 MainActivity 需要很长时间才能加载。所以,我想制作一个启动画面,它会一直显示到MainActivity 完成加载,即:MainActivityonCreate 方法的所有工作都完成了,之后必须关闭启动画面并且@987654325 @启动。此外,启动画面上有动画。

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 将启动。

【问题讨论】:

    标签: java android android-animation splash-screen


    【解决方案1】:

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

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

    【讨论】:

    • 如何判断MainActivity是否已加载?
    • 你的意思是我建议的第二种方法吗?
    • 是的,我指的是第二种方法。
    【解决方案2】:

    试试这个 为闪屏创建自定义主题

    <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)
    

    【讨论】:

    • 我不想要活动的动画。 SplashScreen 活动中有一张我需要制作动画的图像。有点像锄头,加载栏在许多游戏的启动画面中工作
    猜你喜欢
    • 2018-07-16
    • 2013-02-02
    • 2023-04-06
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多