多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 1. 前言 `Activity`有自己默认的切换效果,且这个效果可以由我们自定义。如果需要自定义转场效果,就需要调用`overridePendingTransition(enterAnim: Int, exitAnim: Int)`方法,这个方法必须在`startActivity`之前或者`finish`之后调用才会生效。 * `enterAnim`:`Activity`入场动画资源`id`; * `exitAnim`:`Activity`出场动画资源`id`; * 如果不需要切换动画可以设置`overridePendingTransition(0,0)`; * `overridePendingTransition`只能在主线程中调用; 比如我这里定义两个文件`res/anim/activity_zoom_in.xml`和`res/anim/activity_zoom_out.xml`。 `activity_zoom_in.xml`文件: ~~~ <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_longAnimTime" /> ~~~ `activity_zoom_out.xml`文件: ~~~ <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXDelta="-100%" android:toXDelta="0" android:duration="@android:integer/config_longAnimTime" /> ~~~ 然后应用: ~~~ btn.setOnClickListener { val newIntent = Intent() newIntent.setClass(this, TwoActivity::class.java) startActivity(newIntent) overridePendingTransition(R.anim.activity_zoom_in, R.anim.activity_zoom_out) } ~~~ 就有`Activity`的转场效果。进入第二个`Activity`为淡入,退出第二个返回当前`Activity`的效果为系统默认效果,因为这里当前`Activity`的退出后应用就退出了。 ## 1.1 注意 不要将动画文件写为前面`View`动画的格式,即使用`set`包起来,比如: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="50"/> </set> ~~~ 这样是没有效果的!!! # 2. 系统转场特效动画文件 淡入淡出效果 `overridePendingTransition(android.R.anim.fade, android.R.anim.hold)`; 类似的,对`Fragment`也可以添加转场动画。这里不再介绍。