Activity跳转动画(二)
记录Activity跳转动画的基本操作
项目源码地址 https://github.com/TaciturnKnight/AndroidAnimatorDemo
首先来看下效果
要实现这个效果很简单,只要在startActivity方法和finish方法之后调用overridePendingTransition方法即可
下面上代码
var intent: Intent = Intent(mContext, SimpleAnimActivity::class.java)
startActivity(intent)
overridePendingTransition(R.anim.start_activity_in, R.anim.start_activity_out)
复制代码
override fun finish() {
super.finish()
overridePendingTransition(R.anim.finish_activity_in, R.anim.finish_activity_out)
}
复制代码
对了,因为最近在学习kotlin,所以代码全部采用kotlin的语法,就当练练手,因为是初学,欢迎会kotlin的大神指点代码缺陷和语法错误。看不懂的童鞋可以去看一下kotlin的语法。毕竟java已经告赢了我们大谷歌,kotlin开发绝对是趋势,现在大厂都已经在用kotlin开发了。所以学一学还是好处很大滴。推荐一个api文档http://www.kotlindoc.cn/Basics/Basic-Types.html
扯远了……继续说咱们的跳转动画。 从代码可以看到,这个overridePendingTransition要传两个参数,都是int类型,就是两个动画的资源id,那这两个动画都是干啥用的呢
首先说在startActivity的时候调用的方法
仔细看一下上面的动画效果,其实启动activity时的动画可以分为两个,一个是当前activity向左移动了一段距离,另一个是新的activity从屏幕右侧移动到屏幕左侧,这就是这两个参数的意义:
一个参数表达当前activity移出时的动画,另一个参数表达新的activity进入的动画
来看一下这个方法的参数名
public void overridePendingTransition(int enterAnim, int exitAnim)
第一个参数叫enterAnim
enter是进入的意思,所以第一个参数为新的activity进入时的动画
第二个参数叫exitAnim
exit是退出的意思,所以第二个参数为当前activity移出时的动画
同理,在finish时可以看做当前activity移出,上一级activity进入
所以在finish时,第一个参数为上一级activity进入时的动画,第二个参数为当前activity移出时的动画
好,现在我们搞清楚了这个方法的参数的意义,下面就来说说这几个动画要怎么写
还是先上代码 先来看start_activity_in
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%"
android:toXDelta="0%" />
</set>
复制代码
我们要用的就是translate标签和几个属性,那这几个属性是什么意思呢
duration : 动画执行的时间 fromXDelta : activity在X轴移动时的起点,100%代表起点在屏幕右侧 toXDelta : activiy在X轴移动时的终点,0%就代表终点在屏幕左侧
所以,上边这个动画代表的意思就是,一个activity从屏幕右侧开始,移动到屏幕左侧,耗时500毫秒,观察上面的效果图,这个过程描述的就是启动一个新的activity时,新的activity进入的效果
那activity移出时的动画该怎么描述呢
下面看start_activity_out
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%"
android:toXDelta="-20%" />
</set>
复制代码
这个动画描述的就是一个activity从屏幕左侧开始,向左移动屏幕宽度20% 当然,我们也可以传-100%,这样的效果看上去就像新的activity把现在的activity挤出去一样 这样在启动activity的时候,传入这两个动画,我们就实现了图片里启动的效果了。注意理解和区分两个参数的概念,不要搞反了
同样,在finish的时候,进入的activity要从-20%移动到0%,移出的要从0%移动到100%,其实就是把start时的动画里的from和to反过来。 finish_activity_in
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="-20%"
android:toXDelta="0%" />
</set>
复制代码
finish_activity_out
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%"
android:toXDelta="100%" />
</set>
复制代码
当然这样做出来的效果感觉就是从哪来的回哪去,我们也可以随意设定百分比的值。 #扩展 上述动画只实现了activity沿x轴平移的效果,其实还有很多其他的标签和属性可以设置出不同的效果,比如:
y轴平移
<translate
android:duration="500"
android:fromYDelta="-30%"
android:toYDelta="0%" />
复制代码
y轴和x轴同时平移
<translate
android:duration="500"
android:fromXDelta="-30%"
android:fromYDelta="-30%"
android:toXDelta="0%"
android:toYDelta="0%" />
复制代码
放大缩小
<scale
android:duration="@integer/anim_duration"
android:fromXScale=".1"
android:fromYScale=".1"
android:pivotX="100%"
android:pivotY="100%"
android:toXScale="1"
android:toYScale="1" />
复制代码
当然,也可以两个动画组合使用
x轴平移的同时 放大缩小
<translate
android:duration="@integer/anim_long_duration"
android:fromXDelta="0%"
android:toXDelta="-30%" />
<scale
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale=".5"
android:toYScale=".5"
android:pivotY="50%"
android:pivotX="50%"
android:duration="@integer/anim_long_duration"/>
复制代码
小结
在startActivity和finish方法之后调用overridePendingTransition方法,传入你想要的移出和进入动画,这就是Activity跳转动画的基本操作**
但是这样我们会发现一个问题,项目里有很多Activity,难道要在每个启动Activity的地方都要加上这个方法吗? 当然不是,我们可以全局配置统一的动画跳转效果 首先来到清单文件
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
复制代码
进入theme属性的style文件里
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- 设置所有activity跳转动画 -->
<item name="android:windowAnimationStyle">@style/translucent_style</item>
</style>
<style name="translucent_style" parent="@android:style/Animation">
<!-- 启动时的进入和移出 -->
<item name="android:activityOpenEnterAnimation">@anim/start_activity_in</item>
<item name="android:activityOpenExitAnimation">@anim/start_activity_out</item>
<!-- finish时的进入和移出 -->
<item name="android:activityCloseEnterAnimation">@anim/finish_activity_in</item>
<item name="android:activityCloseExitAnimation">@anim/finish_activity_out</item>
</style>
</resources>
复制代码
这样设置之后,我们正常调用startActivity和finish就会自动采用此处配置的动画。当然你如果想单独设置某个activity的跳转效果,使用overridePendingTransition是可以覆盖这个效果的,这样就很方便了
项目源码地址 https://github.com/TaciturnKnight/AndroidAnimatorDemo
以上就是Activity跳转动画的基本操作