Android dibujar círculo con ruta

Estoy tratando de animar dibujando un círculo. En mi vista personalizada, tengo

private final Paint mPaint = new Paint() { { setDither(true); setStyle(Paint.Style.STROKE); setStrokeCap(Paint.Cap.ROUND); setStrokeJoin(Paint.Join.ROUND); setColor(Color.BLUE); setStrokeWidth(30.0f); setAntiAlias(true); } }; ... protected void onDraw(Canvas canvas) { super.onDraw(); if (mOval == null) { mOval = new RectF(getLeft(), getTop(), getRight(), getBottom()); } if (mPath == null) { mPath = new Path(); mPath.moveTo(0, getHeight() / 2); } float sweepAngle = Math.min((float) mElapsedTime / 1000 * 60 * 1, 1) * 360; if (sweepAngle == 0) { mPath.reset(); } else if (mCurrentAngle != sweepAngle) { mPath.arcTo(mOval, mCurrentAngle, sweepAngle); } mCurrentAngle = sweepAngle; canvas.drawPath(mPath, mPaint); } 

A intervalos, estoy actualizando mElapsedTime y llamando a invalidate() . Sin embargo, nada se dibuja en la pantalla. He intentado varias variaciones, pero en vano. ¿Hay algo que estoy haciendo mal? ¿Hay alguna forma más fácil de hacer esto? Dado un porcentaje de un círculo, quiero ser capaz de hacer que gran parte del círculo sea lo que se dibuja en la pantalla.

Hay dos cosas aquí:

  1. Tienes que llamar a canvas.drawOval(...) antes de dibujar el arco sobre el óvalo. De lo contrario, no aparecerá. Es por eso que mi método no funcionó.

  2. Canvas tiene un método drawArc que toma un ángulo de inicio y un grados para barrer. Consulte http://developer.android.com/reference/android/graphics/Canvas.html#drawArc%28android.graphics.RectF,%20float,%20float,%20boolean,%20android.graphics.Paint%29 . Esto es lo que estaba buscando para dibujar círculos.

EDIT: aquí está el código relevante de mi subclase View :

 private final Paint mArcPaint = new Paint() { { setDither(true); setStyle(Paint.Style.STROKE); setStrokeCap(Paint.Cap.ROUND); setStrokeJoin(Paint.Join.ROUND); setColor(Color.BLUE); setStrokeWidth(40.0f); setAntiAlias(true); } }; private final Paint mOvalPaint = new Paint() { { setStyle(Paint.Style.FILL); setColor(Color.TRANSPARENT); } }; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); RectF mOval = new RectF(left, top, right, bottom); //This is the area you want to draw on float sweepAngle = 270; //Calculate how much of an angle you want to sweep out here canvas.drawOval(mOval, mOvalPaint); canvas.drawArc(mOval, 269, sweepAngle, false, mArcPaint); //270 is vertical. I found that starting the arc from just slightly less than vertical makes it look better when the circle is almost complete. } 
  • Animación a través de la matriz de puntos
  • Cómo dibujar un camino en un lienzo de Android con la animación?
  • Cambio de imagen en ImageView
  • La operación de clic no funciona en el botón android después de aplicar la animación de movimiento a ella en Android
  • AnimateLayoutChanges a true hace que el diseño se mueva hacia arriba y hacia abajo en android
  • Android: ¿Cómo hacer la animación flip para la actividad de Android, al igual que el iphone flip horizontal de izquierda a derecha?
  • Texto intermitente en la vista android
  • Personalización de la animación de navegación
  • Animar dos elementos desplegables en capas Pre-Honeycomb
  • Android explotar la transición no explode GridView
  • Cómo animar FloatingActionButton de la nueva biblioteca de soporte de diseño
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.