做过Android的朋友都知道,当一个APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页。那么这个黑屏或者白屏到底是怎么一回事呢?
当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,用户会以为没有点到APP而再次点击,这极大的降低用户体验。
方法一:
自定义Preview Window,直接在style.xml
文件中设置图片
<style name="AppSplash" parent="AppTheme">
<item name="android:windowBackground">@mipmap/splash</item>
</style>
<activity
android:name=".view.login.SplashActivity"
android:theme="@style/AppSplash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
方法二:
我们可以在启动页增加一些动画效果进行过渡,这样界面看着会顺畅许多。
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setBackgroundDrawable(null);
initStatus();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
final ImageView imageView = findViewById(R.id.imageView);
imageView.post(new Runnable() {
@Override
public void run() {
startAnim(imageView);
}
});
}
ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f);
ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 1.2f);
ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 1.2f);
AnimatorSet set = new AnimatorSet();
set.play(scaleXAnim).with(scaleYAnim).with(alphaAnim);
set.setDuration(3 * 1000);
set.setInterpolator(new AccelerateInterpolator());
set.start();
set.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
startActivity(new Intent(SplashActivity.this, MainActivity.class));
SplashActivity.this.finish();
}
});