Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式更改圆半径-画布_Android_Android Animation_Android Canvas_Android Custom View - Fatal编程技术网

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

Android 以编程方式更改圆半径-画布,android,android-animation,android-canvas,android-custom-view,Android,Android Animation,Android Canvas,Android Custom View,我希望每500毫秒以编程方式将圆半径从0更改为100,使其像一个闪烁的动画 public void onAnimationUpdate(ValueAnimator animator) { float radius = (float)animator.getAnimatedValue(); // Clear canvas and draw next frame invalidateSelf(); } 基本上,我画了两个圆心相同,半径不同的圆。我想将动画应用到后面的圆

我希望每500毫秒以编程方式将圆半径从0更改为100,使其像一个闪烁的动画

public void onAnimationUpdate(ValueAnimator animator) {

    float radius = (float)animator.getAnimatedValue();

    // Clear canvas and draw next frame

    invalidateSelf();
}
基本上,我画了两个圆心相同,半径不同的圆。我想将动画应用到后面的圆上,其他圆的半径更大

如何通过编程将圆的半径从0更改为100,然后再更改为0?我在网上密集地搜索,没有结果

下面是我如何绘制这些cercles的:

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);

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

到目前为止,我已经得到了静态圆:


非常感谢您的帮助。

您的绘图设备可以实现以下界面:

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

}

嘿,我很抱歉看到你删除了关于寻找包含其他彩色石头的路径的问题。有一种方法应该有效。是否要取消删除?问题再次打开。请看一下@Gene