相信大家在开发的过程中都会写一个SplashActivity用来进行预先加载数据,加载数据完成后跳转至主界面,但是android默认的activity切换是向左滑动,这样我个人认为不够好看。就比如我最喜欢的APP网易云音乐,在SplashActivity结束后的跳转就是用的收缩动画。
其实关于实现这样的方法已经有很多人实现了,但是有些在使用的时候我发现根本不够全面,因为我以后在很多地方都会用到,就记在这里了,算是加深自己的记忆。毕竟自己已经很久没有更新博客了~下面呢算是我的一个总结,使用过程中遇到的一些坑~
众所周知,Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画,在Android的2.0版本之后,Java单独提供了一个方法overridePendingTransition。我们查看一下这个方法里面的实现代码:
public void overridePendingTransition(int enterAnim, int exitAnim) {
try {
ActivityManagerNative.getDefault().overridePendingTransition(
mToken, getPackageName(), enterAnim, exitAnim);
} catch (RemoteException e) {
}
}
我们可以看到第一个参数是enterAnim ,第二个参数是exitAnima,根据名字我们可以知道,如果我们要从界面1调到界面2,参数一对应的是界面2的进入动画,参数二对应的是界面1的退出动画。
看一下我简单实现的代码:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent mIntent = new Intent();
if(UserConstant.IsLogin){
mIntent.setClass(SplashActivity.this,MainActivity.class);
}else{
mIntent.setClass(SplashActivity.this,LoginActivity.class);
}
startActivity(mIntent);
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
},1000);
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- fromAlpha:开始时透明度,当为1的时候表示不透明,为0的时候表示全透明;toAlpha:结束时透明度;duration:动画持续时间 -->
<alpha
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
其中fromAlph和toAlph的值一定要搞清楚,千万不要弄反了,不然会出现闪屏 ,不要问我为什么知道...生无绝恋脸(╥╯﹏╰╥)ง
注意 : 关于使用overridePendingTransition,需要注意以下几点:
1、在startActivity(intent)之后使用时,enterAnim在exitAnim上层(图层的上一层)执行(即进入的动画在上层),此时可以没有exitAnim,但是一定要有enterAnim,如果enterAnim传0或者无效的动画资源的话,进入时没有动画效果,新页面会在一瞬间覆盖屏幕,所以exitAnim不会被看见,即使它执行了,你也丝毫看不见。
2、在finish()之后使用时,enterAnim在exitAnim下层执行(出去的动画在上层),此时可以没有enterAnim,但是一定要有exitAnim,道理同上。否则的话,要么动画很丑(页面突然消失,闪黑),要么下层执行的动画被挡住看不见,感觉不到动画效果。
3、overridePendingTransition需要在主线程中有效,子线程无效,如果必须实在子线程用可以Handler、message的方式。我最开始先在timeTask中使用,结果没效果,一定要注意咯~
就是以上这些了,希望能够帮到你~