以编程方式更改圆半径-画布

时间:2018-07-14 02:46:19

标签: android android-animation android-canvas android-custom-view

我想每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);

    }

最终结果应该是这样的:

enter image description here

到目前为止,我有静态圈子:

enter image description here

感谢您的帮助。

1 个答案:

答案 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();

}