Android动画——属性动画

107 阅读2分钟

在属性动画中,常用到的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) {
          //动画开始时执行
      }
  });