在属性动画中,常用到的API有ValueAnimator,ObjectAnimator。
ValueAnimator:时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它;
ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。
属性动画可以看作是增强版的补间动画,与补间动画的不同之处体现在:
●补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的变换,但是属性动画可以定义任何属性的变化。
●补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。
与补间动画类似的是,属性动画需要定义几个方面的属性:
动画持续时间。默认为300ms, android:duration 属性指定。
动画插值方式 ,android:interploator 指定。
动画重复次数, android:repeatCount 。
重复行为 ,android:repeatMode 指定。
动画集,在属性资源文件中通过 <set …/> 来组合。
帧刷新率,指定多长时间播放一帧。默认为 10 ms。
ValueAnimator
ValueAnimator valueAnimator=ValueAnimator.ofFloat(0f,1f); valueAnimator.setDuration(2000); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){ @Override public void onAnimationUpdate(ValueAnimator animtion){ float value=(float)animation.getAnimatedValue(); log.e(...) } }); valueAnimator.start();
ObjectAnimator
TextView textview=findViewById(R.id.tv); //只要TextView类有alpha对应的get set方法,就可以用这个属性,并不一定需要有字段。 ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(textview,"alpha",0f,1f); objectAnimator.setDuration(2000); valueAnimator.start(); //这个监听器需要重写4个方法,如果不需要4个,则添加下面的匿名类 objectAnimator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animation animation) { //动画开始时执行 } @Override public void onAnimationRepeat(Animation animation) { //动画重复时执行 } @Override public void onAnimationCancel()(Animation animation) { //动画取消时执行 } @Override public void onAnimationEnd(Animation animation) { //动画结束时执行 } }); //这个只需要重写你需要的方法即可 objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animation animation) { //动画开始时执行 } });