//平移
@OnClick(R.id.btn_translation)
public void translate() {
ObjectAnimator.ofFloat(iv_pic, "translationX", 50).setDuration(1000).start();
}
//旋转
@OnClick(R.id.btn_rotate)
public void rotate() {
ObjectAnimator.ofFloat(iv_pic, "rotationX", 0, 360).start();
}
//缩放
@OnClick(R.id.btn_scale)
public void scale() {
ObjectAnimator.ofFloat(iv_pic, "scaleX", 1, 0.5f, 0.1f, 1).start();
}
//透明度
@OnClick(R.id.btn_alpha)
public void alpha() {
ObjectAnimator.ofFloat(iv_pic, "alpha", 1, 0.5f, 0.1f, 1).start();
}
//颜色
@OnClick(R.id.btn_color)
public void colorAnim() {
ValueAnimator colorAnim = ObjectAnimator.ofInt(iv_pic, "backgroundColor", 0xFFFF8080, 0xFF8080FF);
colorAnim.setDuration(10 * 1000);
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatMode(ValueAnimator.REVERSE);
colorAnim.start();
}
//动画集合
@OnClick(R.id.btn_set)
public void allSet() {
AnimatorSet set = new AnimatorSet();
set.playTogether(
ObjectAnimator.ofFloat(iv_pic, "translationX", 50),
ObjectAnimator.ofFloat(iv_pic, "rotationX", 0, 360),
ObjectAnimator.ofFloat(iv_pic, "scaleX", 1, 0.5f, 0.1f, 1),
ObjectAnimator.ofFloat(iv_pic, "alpha", 1, 0.5f, 0.1f, 1)
);
set.setDuration(5000);
set.start();
}
//自定义动画,通过改变TypeEnvaluator来实现动画
@OnClick(R.id.btn_custom_anim)
public void customAnim() {
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(3000);
valueAnimator.setObjectValues(new PointF(0, 0));
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setEvaluator(new TypeEvaluator<PointF>() {
// fraction = t / duration
@Override
public PointF evaluate(float fraction, PointF startValue,
PointF endValue) {
// x方向200px/s ,则y方向0.5 * 10 * t
PointF point = new PointF();
point.x = 200 * fraction * 3;
point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
return point;
}
});
valueAnimator.start();
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
PointF point = (PointF) animation.getAnimatedValue();
iv_pic.setX(point.x);
iv_pic.setY(point.y);
}
});
}
1.时间差插值器 TimeInterpolator
负责的是当前时间点的时间流逝百分比
线性插值器 LinearInterpolaator
减速加速插值器 AccelerateDecelerateInterpolator
减速插值器 DecelerateInterpolator
2.属性估值器TypeEnvaluator
负责的是属性值的变化,根据时间插值器得到的时间流逝百分比,计算出改变后的属性,赋值给view,生成动画。
整型属性 IntEnvaluator
浮点型属性 FloatEnvaluator
Color属性 ArgbEnvaluator