属性动画 Property Animation

一、 Android动画分类如下:

属性动画 Property Animation_第1张图片

视图动画的缺陷:
对象的局限性:仅限于View
只改变了View的视觉效果,而没有改变View的属性
动画效果单一

属性动画的特点:
作用对象:任意对象,甚至没对象也可以
作用方式:改变对象的属性
动画效果:按需自定义,不再局限于上述4种基本变换

二、属性动画

1、ValueAnimator.ofObject()简单示例
(1)自定义JavaBean类:

public class Point  {
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}

(2)自定义估值器PointEvaluator类

public class PointEvaluator implements TypeEvaluator {
    @Override
    public Point evaluate(float fraction, Point startValue, Point endValue) {
        int x = (int) (startValue.getX() + fraction * (endValue.getX() - startValue.getX()));
        int y = (int) (startValue.getY() + fraction * (endValue.getY() - startValue.getY()));
        return new Point(x,y);
    }
}

(3)xml布局只有一个button,此处省略
(4)Java功能类

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.but);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Point start= new Point(100,100);
                Point end = new Point(400,600);
                ValueAnimator valueAnimator = ValueAnimator.ofObject(new PointEvaluator(),
                        start,end);
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        Point point = (Point) valueAnimator.getAnimatedValue();
                        Log.e(TAG,"point x= " + point.getX() + "point y= " + point.getY());
                        btn.setTranslationX(point.getX());
                        btn.setTranslationY(point.getY());
                        btn.requestLayout();
                    }
                });
                valueAnimator.setDuration(3000);
                valueAnimator.start();
            }
        });
    }
}

你可能感兴趣的:(Android)