Android 属性动画学习

来源:互联网 发布:网络鲜花销售 编辑:程序博客网 时间:2024/06/17 09:12
由于android 3.0之前的 动画框架存在一定的局限--动画改变的只是显示,不能响应时间,所以3.0后google提出了属性动画
这样一个新的动画框架。
在animator中使用最多的就是AnimatorSet和ObjectAnimator,使用ObjectAnimator进行更精准的控制,只控制对象的一个属性值,而使多个ObjectAnimator组合到AnimatorSet形成一个动画,可以调用setFrameDelay设置动画帧之间的间隙时间

ObjectAnimator是属性动画中最重要的实行类,创建一个ObjectAnimator只需通过他的静态工厂类直接返回一个对象
一个简单的平移动画
TextView tv = (TextView) findViewById(R.id.heheda);
//平移动画
ObjectAnimator animator = ObjectAnimator.ofFloat(
tv,
"translationX",
300
);
animator.setDuration(300);
animator.start();
在使用ObjectAnimator的时候,操作的属性必须有get,set方法,不然无法起效
*translationX和 translationY:这两个属性作为一个增量来控制View从他布局容器的左上角偏移的位置
*rotaion rotionX和rotaionY :这三个属性控制View对象围绕他的支点进行2D缩放
*pivotX和pivotY:这两个属性控制View对象支点的位置,围绕这个支点进行缩放旋转处理
*alpha:表示view的alpha透明程度默认1(不透明) 0(完全透明)
*x和y最简单的两个实用的属性描述了view在父容器中最终的位置

PropertyValuesHolder 
如果只对一个对象的多个属性,要同时作用多种都能动画可以使用PropertyvaluesHolder
    PropertyValuesHolder pv1 = PropertyValuesHolder.ofFloat("translationX",300f);
PropertyValuesHolder pv2 = PropertyValuesHolder.ofFloat("scaleX",10f,5f,10f);//开始x,x,结束x
PropertyValuesHolder pv3 = PropertyValuesHolder.ofFloat("scaleY",10f,5f,10f);
ObjectAnimator.ofPropertyValuesHolder(tv,pv2,pv3).setDuration(5000).start();

//ValueAnimator本身不提供任何动画效果,它更像一个数值器,用来生产有一定规律的数字,从而让调用者来控制动画实现过程
//ValueAnimatorAnimatorUpdateListener中监听数值的变化
final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,100);
valueAnimator.setTarget(tv);
valueAnimator.setDuration(3000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Float value = (Float) valueAnimator.getAnimatedValue();
}
});
//一个完整动画于start repeat ed cancel四个过程功过android提供的四个接口
//可以很方便的监听到这四个监听事件
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",0.5f);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {

}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}
});
}



0 0