【问题标题】:Change a circle radius programmatically - Canvas以编程方式更改圆半径 - 画布
【发布时间】:2018-07-14 02:46:18
【问题描述】:

我想以编程方式每 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);

    }

最终的结果应该是这样的:

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

感谢您的帮助。

【问题讨论】:

  • 嘿,很遗憾看到您删除了有关寻找包含其他颜色宝石的路径的问题。有一种方法应该奏效。想取消删除它吗?
  • 问题再次打开。请看@Gene

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


【解决方案1】:

你的 Drawable 可以实现AnimatorUpdateListener 接口:

此接口的实现者可以将自己添加为更新侦听器 到 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();

}

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多