Android5.0之前要修改页面转场动画,只能去写一些view动画,然后通过overridePendingTransition方法设置进去。Android5.0之后Activity的出入场动画总体上来说可以分为两种,一种就是分解、滑动进入、淡入淡出,另外一种就是共享元素动画,下面我们分别就这两种动画进行说明:
分解:
跳转代码
//创建intnet对象
val intent = Intent(this, TwoActivity::class.java)
//创建一个Builde对象(这里值传递一个上下文对象,系统会自动封装转场动画)
val options = ActivityOptions.makeSceneTransitionAnimation(this).toBundle()
//调用两个参数的跳转方法
startActivity(intent, options)复制代码
在twoActivity页面写上:
window.enterTransition = Explode().setDuration(2000)
window.exitTransition = Explode().setDuration(2000)复制代码
比之前的页面跳转多了Bundle参数,然后另外一个页面设置设置两行代码,就能完成分解的转场动画。
滑动进入:
跳转代码
//创建intnet对象
val intent = Intent(this, TwoActivity::class.java)
//创建一个Builde对象(这里值传递一个上下文对象,系统会自动封装转场动画)
val options = ActivityOptions.makeSceneTransitionAnimation(this).toBundle()
//调用两个参数的跳转方法
startActivity(intent, options)复制代码
在twoActivity页面写上:
window.enterTransition = Slide().setDuration(2000)
window.exitTransition = Slide().setDuration(2000)复制代码
浅入浅出效果
跳转代码
//创建intnet对象
val intent = Intent(this, TwoActivity::class.java)
//创建一个Builde对象(这里值传递一个上下文对象,系统会自动封装转场动画)
val options = ActivityOptions.makeSceneTransitionAnimation(this).toBundle()
//调用两个参数的跳转方法
startActivity(intent, options)复制代码
在twoActivity页面写上:
window.enterTransition = Fade().setDuration(2000)
window.exitTransition = Fade().setDuration(2000)复制代码
共享元素
共享单个元素
共享元素和上边的代码不同的是用三个参数的makeSceneTransitionAnimation(x,y,z)方法获取一个buidle对象,然后传递过去,且要跳转的页面不需要设置window,只是需要和相关联的控件设置上transitionName属性值一样即可,类似代码如下:
页面A布局:
<ImageView
android:id="@+id/image"
android:layout_width="200dp"
android:layout_height="200dp"
android:transitionName="@string/transition_image" />复制代码
页面A跳转代码
Intent intent = new Intent(this, TwoActivity.class);
intent.putExtra("bigUrl", bigUrl);
intent.putExtra("smallUrl", smallUrl);
ActivityOptionsCompat compat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, image, getString(R.string.transition_image));
ActivityCompat.startActivity(MainActivity.this, intent, compat.toBundle());复制代码
参数x:是上下文对象
参数y:要共享元素的控件对象
参数z:共享元素的transitionName值
对应的页面B的布局只需要这样写即可
<ImageView
android:id="@+id/image"
android:layout_width="200dp"
android:layout_height="200dp"
android:transitionName="@string/transition_image" />复制代码
类似微信的共享元素代码:github.com/XiFanYin/Vi…