Android动画----属性动画
程序员文章站
2024-03-21 11:13:28
...
一、使用属性动画
1、定义:属性动画可以对任意对象的属性进行动画。默认时间间隔300ms,默认帧率10ms/帧
2、使用:
API 11才可以使用,之前的可以用Nineoldandroids来兼容,其有常用的几个动画类:ValueAnimator、ObjectAnimator、AnimatorSet。其使用方法如下:
(1)改变一个对象的translationY属性,沿着Y轴向上平移:用ObjectAnimator
(2)改变背景色属性
(3)动画集合变化
(4)也可以用XML实现,但用代码实现比较灵活
二、插值器和估值器
1、插值器是根据时间流逝比计算位移x的改变值(0~1)之间,例如:匀速插值器时间流逝比为0.5,则x改变值为0.5
2、估值器是对于x的改变具体变成了什么,也就是说具体的位移为多少,要用估值器来计算。例如:匀速运动,x的改变值为0.5,距离是从0到40,那么估值器算过后位移y的值为 (40-0)*05 = 20
3、自定义插值器
三、属性动画监听器
属性动画监听器主要有如下两个接口:AnimatorUpdateListener和AnimatorListener
1、AnimatorListener类
2、AnimatorUpdateListener
四、对任意属性做动画
eg:Button的宽度进行动画时,如果使用View动画是不行的。因为View只支持平移、旋转、缩放、不透明度,所以只能用属性动画。
1、属性动画生效条件
属性动画要求动画作用的对象提供该属性的get和set方法,不满足的话动画不生效。
2、如何添加set和get方法
private void performAnimate() {//使用动画的方法
ViewWrapper viewWrapper = new ViewWrapper(mButton);
ObjectAnimator.ofInt(viewWrapper, "width", 500).setDuration(5000).start();
//直接传mButton是实现不了的
//ObjectAnimator.ofInt(mButton, "width", 500).setDuration(5000).start();
}
@Override
public void onClick(View v) {
if (v == mButton) {
performAnimate();
}
}
private static class ViewWrapper {//内部类,设置set/get
private View mTarget;
public ViewWrapper (View mTarget) {
this.mTarget = mTarget;
}
public int getWidth() {
return mTarget.getLayoutParams().width;
}
public void setWidth() {
mTarget.getLayoutParams().width = width;
mTarget.requestLayout();
}
}
五、属性动画工作原理--null看不懂。