我想每500毫秒以编程方式将圆半径从0更改为100,使其像闪烁的动画一样。
基本上,我绘制了两个具有相同中心点且半径不同的圆。我想将动画应用到半径较大的其他圆上。
如何以编程方式将圆的半径从0更改为100,然后又更改为0?我在互联网上进行了密集搜索,没有结果。
这是我绘制这些大脑的方式:
private static final int STROKE_WIDTH = 20;
private Paint mInnerCircle, mOutterCircle;
private int centerX, centerY, radius;
public void init(){
mInnerCircle = new Paint(Paint.ANTI_ALIAS_FLAG);
mInnerCircle.setColor(Color.BLUE);
mInnerCircle.setStyle(Paint.Style.FILL);
mOutterCircle = new Paint(Paint.ANTI_ALIAS_FLAG);
mOutterCircle.setStyle(Paint.Style.STROKE);
mOutterCircle.setStrokeWidth(STROKE_WIDTH);
mOutterCircle.setColor(Color.parseColor("#33b5e5"));
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
centerX = canvas.getWidth()/ 2;
centerY = canvas.getHeight()/ 2;
radius = Math.min(centerX,centerY);
canvas.drawCircle(centerX, centerY, radius - STROKE_WIDTH / 2, mOutterCircle);
canvas.drawCircle(centerX, centerY, radius - STROKE_WIDTH, mInnerCircle);
}
最终结果应该是这样的:
到目前为止,我有静态圈子:
感谢您的帮助。
答案 0 :(得分:0)
您的Drawable可以实现AnimatorUpdateListener接口:
此接口的实现者可以将自己添加为更新侦听器 到ValueAnimator实例以接收每个动画的回调 在为该帧计算当前帧的值之后 ValueAnimator
然后重写onAnimationUpdate()方法以处理动画的每一帧。
public void onAnimationUpdate(ValueAnimator animator) {
float radius = (float)animator.getAnimatedValue();
// Clear canvas and draw next frame
invalidateSelf();
}
然后以您的init()
方法开始动画:
public void init() {
...
ValueAnimator valueAnimator = ValueAnimator.ofFloat(START_RADIUS, END_RADIUS);
valueAnimator.setDuration(DURATION_MILLIS)
valueAnimator.addUpdateListener(this);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.start();
}