Cómo dibujar un círculo con animación en android con el tamaño del círculo basado en un valor

Quiero desarrollar un componente personalizado que dibuje parte del círculo basado en valores diferentes. Por ejemplo, dibujar 1/4 cirle, 1/2 círculo, etc. El componente necesita ser animado para mostrar el proceso de dibujo. El círculo parcial se dibuja en la parte superior de una imagen estática, y pienso usar dos vistas, animadas una encima de la estática. Cualquier sugerencia de cómo desarrollar esto?

Puse la captura de pantalla para referencia.

Introduzca aquí la descripción de la imagen

Por favor refiérase a la imagen, y consiga una sensación cómo se parece. ¡Gracias!

Gracias por adelantado.

Tienes que dibujar la vista de círculo, y después de eso debes crear una animación.

Creación de la vista de círculo:

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

Creación de la clase de animación para establecer el nuevo ángulo:

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

Ponga el círculo en su diseño:

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

Y, finalmente, iniciar la animación:

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

El resultado es: Introduzca aquí la descripción de la imagen

  • Android gira el mapa de bits alrededor del centro sin cambiar el tamaño
  • ¿Puedo dibujar rectángulo en XML?
  • Android OpenGL ES - Cómo dibujar un polígono cóncavo lleno?
  • GetChildDrawingOrder llamado / utilizado de forma errática?
  • Cómo dibujar figuras sin llenar en Android?
  • Cómo mover un ShapeDrawable en lienzo en eventos de toque
  • Dibuja Pixel con OpenGLEs para Android
  • Cómo dibujar una ruta con ancho de trazo variable
  • Dibuje Bitmap en ImageView personalizado y obtenga las coordenadas de ImageView independientemente del dispositivo
  • Cómo dibujar una flecha utilizando la clase de gráficos de Android?
  • Dibujo sobre lienzo - PorterDuff.Mode.CLEAR dibuja negro! ¿Por qué?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.