安卓动画学习(三)--objectAnimator的用法

安卓动画学习(三)

  • 在上一篇我们看到了估值器,和ValueAnimator这个类的简单使用方法,可是归根结底还是太麻烦,因为所有的东西都需要我们自己去写
  • 这一篇给大家带来ObjectAnimator,他是ValueAnimator的子类,实现了与控件绑定,我们来看看具体用法吧

ObjectAnimator

  • 简单使用
    ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);  
    animator.setDuration(2000);  
    animator.start();  
  • 大概理解一下,先传进去控件实例,再传要改变的属性,再去传改变的值区间
  • 关于第二个参数,我具体解释一下,我们传进去的这个参数,是ObjectAnimator拿去到我们指定的View中去找相关set方法的,比如我们在这里传的是alpha,那么找的就是setAlpha()这个方法,这样就达到了改变透明度属性的效果,然后再去重绘View,就可以实现动画的效果了
  • 那么这些set方法是从哪里来的呢,他是从View继承而来的,看一下都继承了哪些方法
//1、透明度:alpha  
public void setAlpha(float alpha)  
  
//2、旋转度数:rotationrotationXrotationY  
public void setRotation(float rotation)  //Z轴旋转
public void setRotationX(float rotationX)  
public void setRotationY(float rotationY)  
  
//3、平移:translationXtranslationY  
public void setTranslationX(float translationX)   
public void setTranslationY(float translationY)  
  
//缩放:scaleXscaleY  
public void setScaleX(float scaleX)  
public void setScaleY(float scaleY) 
  • 可见,如果我们要改变控件的属性,这个属性就必须有相关set方法,那么,如果我们自己写的控件,我们要如何去写自己的set方法呢
  • 这里,如果是我们自己的set方法,命名必须依照驼峰命名法,也就是单词的第一个字母大写,并且在set方法里除了改变响应的值之外,还需要调用invalidate或者postinvalidate方法去重绘VIew
  • 这里看下代码吧
useObjectAnimatorTOChangeMyView view = findViewById(R.id.main_useObjectAnimatorView);
        final ObjectAnimator objectAnimator = ObjectAnimator.ofInt(view,"radius",0,100,200,300);
        objectAnimator.setDuration(3000);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                objectAnimator.start();
            }
        });
  • 我定义的View的代码
public useObjectAnimatorTOChangeMyView(Context context) {
        super(context);}
    public useObjectAnimatorTOChangeMyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);}
    public useObjectAnimatorTOChangeMyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);}

    int radius = 20;

    Paint mPaint = new Paint();

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(Color.GREEN);
        canvas.drawCircle(250,500,radius,mPaint);
    }

    public void setRadius(int radius) {
        this.radius = radius;
        invalidate();
    }
  • 代码很简单,只是写了一个set方法而已,不用解释
  • 那么,我们平时在写的时候变化的区间值往往都是两个及以上,当是一个参数的时候会发生什么事情呢,也就是说我们没有了动画变化的起点
  • 这个时候系统就会去调用相关属性的get方法去得到我们控件的初始值
  • 那么,如果是我们自己写控件,就必须在一定的时候写出get方法,比如给我的View加上get方法就是
public int getRadius() {
        return 10;
    }
  • 也就是说,我们需要在get方法中去设置一个初始值才行
  • 到这里关于这个类基本就这样了
  • ObjectAnimator的其他方法也无非跟valueAnimator一样,用的时候再去看文档呗

猜你喜欢

转载自blog.csdn.net/asffghfgfghfg1556/article/details/80443965