最近有时间将工作用到的一些东西整理了出来,给大家共享下,也给自己备份一份记忆!
public class ValueAnimatorTestView extends View {
private static final int RADIUS = 50;
private Paint mPaint;
private Point point;
public ValueAnimatorTestView(Context context) {
super(context);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.CYAN);
ValueAnimator backGroundColorAutoChangeAnimator = ObjectAnimator.ofInt(this,
"backgroundColor", Color.RED, 0xff8080FF);
backGroundColorAutoChangeAnimator.setDuration(3000);
backGroundColorAutoChangeAnimator.setEvaluator(new ArgbEvaluator());
backGroundColorAutoChangeAnimator.setRepeatCount(ValueAnimator.INFINITE);// 设置重复模式,现在是无限重复
backGroundColorAutoChangeAnimator.setRepeatMode(ValueAnimator.REVERSE);// 设置重复的方向
// 现在是反向
backGroundColorAutoChangeAnimator.start();
}
public ValueAnimatorTestView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.CYAN);
}
@Override
protected void onDraw(Canvas canvas) {
if (point == null) {
point = new Point(RADIUS, RADIUS);
drawCircle(canvas);
startAnimale();
} else {
drawCircle(canvas);
}
}
@SuppressLint("NewApi")
private void startAnimale() {
Point startPoint = new Point(RADIUS, RADIUS);
Point endPoint = new Point(getWidth() - RADIUS, getHeight() - RADIUS);
ValueAnimator animator = ValueAnimator.ofObject(new PointEvaluator(), startPoint, endPoint);
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
point = (Point) animation.getAnimatedValue();
invalidate();
}
});
animator.setInterpolator(new AccelerateDecelerateInterpolator());// 加速
Point upStartPoint = new Point(getWidth() - RADIUS, getHeight() - RADIUS);
Point upEndPoint = new Point(getWidth() - RADIUS, RADIUS);
ValueAnimator backAnimator = ValueAnimator.ofObject(new PointEvaluator(), upStartPoint,
upEndPoint);
backAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
point = (Point) animation.getAnimatedValue();
invalidate();
}
});
backAnimator.setInterpolator(new DecelerateInterpolator());// 减速
AnimatorSet s1 = new AnimatorSet();
s1.playSequentially(animator, backAnimator);// 串行
// animator.setDuration(10000);
// animator.start();
// 第一个参数是设置动画的对象
// 第二个参数是设置动画的属性
// 第三四参数是属性的变化区域,可以有多个,那就是两边的是起始点,中间的是过度点
ValueAnimator backGroundColorAutoChangeAnimator = ObjectAnimator.ofInt(mPaint, "color",
Color.WHITE, Color.BLACK);
// backGroundColorAutoChangeAnimator.setDuration(10000);
backGroundColorAutoChangeAnimator.setEvaluator(new ArgbEvaluator());
backGroundColorAutoChangeAnimator.setRepeatCount(ValueAnimator.INFINITE);
backGroundColorAutoChangeAnimator.setRepeatMode(ValueAnimator.REVERSE);
// backGroundColorAutoChangeAnimator.start();
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(s1, backGroundColorAutoChangeAnimator);// 并行
animatorSet.setDuration(5000);
// animatorSet.play(animator).with(backGroundColorAutoChangeAnimator);
animatorSet.start();
}
private void drawCircle(Canvas canvas) {
int x = point.x;
int y = point.y;
canvas.drawCircle(x, y, RADIUS, mPaint);
}
下面是一些效果图,制作动态挺麻烦的,家就这看吧 !