Android属性动画分析

本文深入探讨了Android属性动画框架中的ObjectAnimator与ValueAnimator的用法,包括如何创建和配置动画,操作View对象的属性如旋转、平移、缩放等,以及动画事件的监听和插值器的应用。同时介绍了如何利用AnimatorSet实现多个动画的组合,并解释了动画过程中关键的概念和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、属性动画是3.0之后出来的,在属性动画中有两个属性框架,分别是ObjectAnimator或ValueAnimator,下面我们来详细的介绍它们的用法。

     ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过它的静态工厂类直接返回一个ObjectAnimator对象。

ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",0f,360f);
               animator.setDuration(2000);
               animator.start();
       这是一个View的旋转动画,第一个参数是View对象,第二个参数是要操作的属性,后面是一个可变数组参数,我这传的是0f到360f是表示控件旋转360度,

填2000参数是表示做这个旋转动画执行2000毫秒。

2、我们来介绍ObjectAnimator操作的属性。

      translationX和translationY:这两个属性作为一种增量来控制这View对象从它布局容器的左上角坐标开始的位置。

      rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。

      scaleX和scaleY:这两个属性控制着View对象围绕他的支点进行2D缩放。

      pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。

      X 和 Y:这是两个简单实用的属性,他描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX,translationY值得累计和。

     alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。

3、要同时使用动画时可以使用PropertyValuesHolder对象来控制translationX,scaleX,scaleY这三个属性。

PropertyValuesHolder  pvh1=PropertyValuesHolder.ofFloat(“translationX”,300f);
PropertyValuesHolder  pvh2=PropertyValuesHolder.ofFloat(“scaleX”,1f,0,1f);
PropertyValuesHolder  pvh3=PropertyValuesHolder.ofFloat(“scaleY”,1f,0,1f);
                      ObjectAnimator.ofPropertyValuesHolder(view,pvh1,pvh2,pvh3)
                      .setDuration(1000)
                      .start();
4、在来说说ValueAnimator在属性动画中占有非常重要的地位,虽然不想ObjectAnimator那样耀眼但它却是属性动画的核心所在,ObjectAnimator也是继承ValueAnimator。

 ValueAnimator  animator = ValueAnimator.ofFloat(0,100);
        animator.setTarget(view);
        animator.setDuration(1000);
        animator.start();

5、动画事件的监听。

 ValueAnimator  animator = ValueAnimator.ofFloat(0,100);
        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) {
             //监听动画是否重复
            }
        });
        animator.start();
 当然如果使用不了这多的方法,也不需要重写这么的方法 ,Api也提供了这种处理。

  ObjectAnimator animator = ObjectAnimator.ofFloat(this,"translationX",360f);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                //监听动画值
            }
        });

6、AnimatorSet动画集合

       对于一属性同时作用多个属性动画效果,前面已经用PropertyValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,

同时也能实现更为精确的顺序控制。

 ObjectAnimator animator1 = ObjectAnimator.ofFloat(this,"translationX",360f);
        ObjectAnimator animator2 = ObjectAnimator.ofFloat(this,"scaleX",1f,0f,1f);
        ObjectAnimator animator3 = ObjectAnimator.ofFloat(this,"scaleY",1f,0f,1f);
        AnimatorSet  animatorSet = new AnimatorSet();
        animatorSet.setDuration(1000);
        animatorSet.playTogether(animator1,animator2,animator3);
        animatorSet.start();

7.interpolators(插值器)

       插值器是动画中一个非常重要的概念,通过插值器(Interpolators),可以定义动画变换速率,这一点非常类似物理中的加速度,其作用主要是控制目标变量的变化值进行对应的变换。

//自定义Interpolators动画过程
public class DecelerateAccelerateInterpolator implements TimeInterpolator {
    @Override
    public float getInterpolation(float input) {
        float result;
        if (input <= 0.5) {
            result = (float) ((Math.sin(Math.PI*input))/2);
        }else {
            result = (float) ((2-Math.sin(Math.PI*input))/2);
        }
        return result;
    }
}


 












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值