Android 自定义activity切换动画实现,overridePendingTransition的使用详解

xiaoxiao2021-02-28  71

相信大家在开发的过程中都会写一个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); 淡入动画fade_in.xml的代码: <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> 淡出动画fade_out.xml的代码: <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中使用,结果没效果,一定要注意咯~

就是以上这些了,希望能够帮到你~

转载请注明原文地址: https://www.6miu.com/read-34519.html

最新回复(0)