如何设置Activity的切换动画?
上一片文章我们讲述了Navigation切换动画,其实在Activity也能轻松实现切换动画。只不过我们很少去给activity设置切换动画,一般都是系统默认的。
在Activity类中提供了overridePendingTransition
方法:
其参数意思是设置进入动画和退出动画,调用时机为:startActivity(intent)之后或者finish()方法中
示例: 从MainActivity跳转到MainActivity2
val intent = Intent(MainActivity::class.java, MainActivity2::class.java) |
R.anim.slide_in_left:
|
R.anim.slide_out_right:
|
最终效果:
从ActivityA跳转到ActivityB, A使用的是enter_anim,B使用的是exit_anim
返回的时候并没有执行动效,我们可以在finish中设置:
override fun finish() { |
从ActivtyB返回ActivityA,B执行exit_anim,A执行enter_anim
现在我们得到一个完整的跳转动画:
参考前面介绍的视图动画,我们可以创建一系列旋转缩放透明度动画,更多动效请在Demo中查看。
View无缝衔接
我们经常在一些app中看到界面跳转的时候,一些控件好像可以无缝衔接,比如搜索框、九宫格图片等
现在来实现ImageView的无缝切换,在MainActivity界面中加入一张图片:
<ImageView |
重点是android:transitionName="shareElement"
用来设置共享元素
名称,在ActivityB布局中加入同样的控件。
使用ActivityOptionsCompat
进行获取共享元素,注意只在Andoid5.0以上有效:
val bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(this,binding.imageview,"shareElement").toBundle() |
最终效果:
这里在加载Bitmap大图的时候有明显卡顿,所以只建议在一些原生控件中使用
搜索框切换:
设置多个共享元素:Pair(View,TAG)
import androidx.core.util.Pair |
ActivityOptions
前面说到了
ActivityOptionsCompat
设置共享元素,其实ActivityOptions
中还有许多其他方法
Public Methods | |
---|---|
makeCustomAnimation | 设置自定义进场动画 |
makeScaleUpAnimation | 设置放大View |
makeClipRevealAnimation | 从View的某个区域开始放大 |
makeThumbnailScaleUpAnimation | 放大一张图片 |
具体可以参考官方文档:https://developer.android.com/reference/android/app/ActivityOptions
个人觉得这些方法基本没太大用用处
Demo地址:https://github.com/xluu233/AnimationDemo
文章代码略有缺失,完整请查看Demo,项目整体还在完善中,欢迎大佬们指点。卑微Androider在线求个Star😅