如何在后台加载 activity 时显示带有动画的启动画面。 (Android)
How to show a Splash Screen with Animation while activity is loading in background. (Android)
我的 Android 应用程序的 MainActivity
需要很长时间才能加载。所以,我想制作一个启动画面,它会一直显示到 MainActivity
完成加载即:MainActivity
的 onCreate
方法的所有工作都已完成,之后启动画面必须关闭并启动 MainActivity
。此外,启动画面上有动画。
启动画面的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 完成加载之前,将在其上播放动画(如加载栏),之后 MainActivity 将启动。
要实现这一点,您可以将数据加载移动到您的 SplashScreenActivity 并在加载数据时启动 MainActivity,或者将 ahowing Splash-View 移动到您的 MainActivity,您最初只在其中显示 Splash-View 直到加载数据,然后隐藏该视图或将其替换为 MainActivty 的实际视图。
EDIT 我建议您使用 AsyncTask 来异步执行加载。您可以在它的 onProgressUpdate() 方法中更新进度条,当工作完成后,您可以在 onPostExecute() 中隐藏进度条并显示正常布局。
试试这个
为启动画面创建自定义主题
<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)
我的 Android 应用程序的 MainActivity
需要很长时间才能加载。所以,我想制作一个启动画面,它会一直显示到 MainActivity
完成加载即:MainActivity
的 onCreate
方法的所有工作都已完成,之后启动画面必须关闭并启动 MainActivity
。此外,启动画面上有动画。
启动画面的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 完成加载之前,将在其上播放动画(如加载栏),之后 MainActivity 将启动。
要实现这一点,您可以将数据加载移动到您的 SplashScreenActivity 并在加载数据时启动 MainActivity,或者将 ahowing Splash-View 移动到您的 MainActivity,您最初只在其中显示 Splash-View 直到加载数据,然后隐藏该视图或将其替换为 MainActivty 的实际视图。
EDIT 我建议您使用 AsyncTask 来异步执行加载。您可以在它的 onProgressUpdate() 方法中更新进度条,当工作完成后,您可以在 onPostExecute() 中隐藏进度条并显示正常布局。
试试这个 为启动画面创建自定义主题
<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)