4. 指定KeyFrame(关键帧)
一个KeyFrame对象由一个时间/值对组成, 可以用它定义一个动画在一个特定时间的状态. 每一个KeyFrame可以指定它自己的插值器, 用于控制上一个关键帧和当前关键帧中间这段时间的行为.
5. 给View做动画
属性动画系统比视图动画系统多了一些优点. 视图动画系统只是改变View的绘制方式, 但并不改变View本身. 如点击事件的响应的位置不会因为绘制的位置不同而改变. 属性动画可以通过改变View对象的真实属性做动画. 然后View自动调用它的invalidate()方法刷新屏幕.
View中可以做属性动画的属性有
translationX和translationY:控制View的位置
rotation, rotationX, rotationY:控制在2D和3D坐标系中相对于坐标原点的旋转.
scaleX, scaleY:控制一个View对象相对于坐标原点的缩放.
pivotX, pivotY:View对象进行旋转和缩放所发生的点的位置, 默认为View对象的中心.
x, y:描述View在其容器中的最终位置.
alpha:View的透明度.
5.1 使用ViewPropertyAnimator做动画
ViewPropertyAnimator可以给几个属性做并行动画处理, 它的行为和ObjectAnimator很像,但是做多属性的动画时会更加高效.
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
5.2 在XML中声明动画
为了区分新的属性动画API, 应该把属性动画的xml文件放在res/animator中而不是res/anim.
xml中支持如下三个标签
ValueAnimator - <animator>
ObjectAnimator - <objectAnimator>
AnimatorSet - <set>
<set Android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();