本来此篇是想介绍属性动画的,但是属性动画还是比较简单,大致就是创建一个变化区间,然后监听屏幕的刷新,屏幕每刷新一次,就向主线程Looper中发送一个任务,用来设置属性的值。和前面补间动画最大的区别是补间动画是view层级的,在view绘制时,就会对view实行动画,而且补间动画只是view的影子,不是真正的view属性变化,并且补间动画继承的是Animation这个类。属性动画是真正的view属性发生变化,继承的是Animator,并且刷新机制也是由屏幕刷新导致的。
那么这一篇就来详细说一下Transition动画,Transition动画也叫场景动画,是基于两个场景之间的关系进行特定的变化,场景对应Scene这个类,主要用来记录简单的layout信息,具体的变化过程是Transition来决定的。
国际惯例,先上效果和代码:
上面的动画有两个变化过程,一是view的大小变化,二是view的颜色变化。大小变化在安卓中已经为我们提供好了:ChangeBounds
。好了,先实现大小变化:
场景1对应的xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginTop="20dp">
<View
android:id="@+id/v_scene_1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:background="#FF0000" />
<View
android:id="@+id/v_scene_2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="500dp"
android:background="#00FF00" />
</RelativeLayout>
场景2对应的xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"