一、 Android動畫分類如下:
視圖動畫的缺陷:
對象的侷限性:僅限於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<Point> {
@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();
}
});
}
}