Как нарисовать круг с анимацией в андроиде с размером круга на основе значения

Я хочу разработать пользовательский компонент, который рисует часть круга на основе разных значений. Например, нарисуйте 1/4 cirle, 1/2 circle и т. Д. Компонент должен быть анимирован для отображения процесса рисования. Частичный круг рисуется поверх статического изображения, и я планирую использовать два вида, анимированных один поверх статического. Любое предложение, как это сделать?

Я поставил скриншот для справки.

Введите описание изображения здесь

Пожалуйста, обратитесь к рисунку и почувствуйте, как это выглядит. Благодаря!

Заранее спасибо.

Solutions Collecting From Web of "Как нарисовать круг с анимацией в андроиде с размером круга на основе значения"

Вы должны нарисовать круг, и после этого вы должны создать анимацию.

Создание вида круга:

public class Circle extends View { private static final int START_ANGLE_POINT = 90; private final Paint paint; private final RectF rect; private float angle; public Circle(Context context, AttributeSet attrs) { super(context, attrs); final int strokeWidth = 40; paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(strokeWidth); //Circle color paint.setColor(Color.RED); //size 200x200 example rect = new RectF(strokeWidth, strokeWidth, 200 + strokeWidth, 200 + strokeWidth); //Initial Angle (optional, it can be zero) angle = 120; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(rect, START_ANGLE_POINT, angle, false, paint); } public float getAngle() { return angle; } public void setAngle(float angle) { this.angle = angle; } } 

Создание класса анимации для установки нового угла:

 public class CircleAngleAnimation extends Animation { private Circle circle; private float oldAngle; private float newAngle; public CircleAngleAnimation(Circle circle, int newAngle) { this.oldAngle = circle.getAngle(); this.newAngle = newAngle; this.circle = circle; } @Override protected void applyTransformation(float interpolatedTime, Transformation transformation) { float angle = oldAngle + ((newAngle - oldAngle) * interpolatedTime); circle.setAngle(angle); circle.requestLayout(); } } 

Поместите круг в свой макет:

 <com.package.Circle android:id="@+id/circle" android:layout_width="300dp" android:layout_height="300dp" /> 

И, наконец, запуск анимации:

 Circle circle = (Circle) findViewById(R.id.circle); CircleAngleAnimation animation = new CircleAngleAnimation(circle, 240); animation.setDuration(1000); circle.startAnimation(animation); 

Результат: Введите описание изображения здесь