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.
- Cómo dibujar algo con el dedo en una aplicación de Android ... Y guardarlo en la web
- PorterDuff y ruta
- Lanzar una lona de Android
- El elemento ActionBar no se muestra cuando un ShapeDrawable está configurado como su icono
- Perforar un agujero en una superposición de rectángulo con aceleración HW activada en Ver
Por favor refiérase a la imagen, y consiga una sensación cómo se parece. ¡Gracias!
Gracias por adelantado.
- ¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
- Dibujar en un lienzo con demora - "hacer onDraw () reducir la velocidad"
- Coordenadas no correspondientes
- ¿Cómo puedo dibujar una línea vertical en una actividad cuando se presiona un botón?
- Canvas 'drawLine y drawRect no incluye la posición final?
- Crear una línea curva en forma de "L" con datos dinámicos
- Cambiar dinámicamente el color del divisor de barra de acción (android: bottom para ShapeDrawable generado por programa)?
- Crear lista de capas con esquinas redondeadas mediante programación
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:
- WebView textarea no aparece el teclado
- Implementación de onScrollListener para detectar el final de desplazamiento en un ListView