Usted puede hacer una vista personalizada (por ejemplo PieProgressView) o una Disponibles personalizada (por ejemplo PieProgressDrawable). Tomé el enfoque de vista personalizada, pero tampoco es perfectamente viable.
Un vistazo rápido a la fuente de Android ProgressView produce una implementación tremendamente compleja. Obviamente, están cubriendo todas sus bases, pero no tienes que escribir algo tan complejo. Realmente solo necesitamos dos cosas:
- Un miembro para realizar un seguimiento del progreso actual.
- Un método para dibujar el gráfico basado en el progreso actual.
El número uno es fácil, simplemente mantenga un campo de miembro que rastree el porcentaje actual del pastel para dibujar. El número 2 es un poco más complicado pero, afortunadamente, podemos hacerlo con los métodos de dibujo estándar de Canvas.
Convenientemente, la clase Canvas de Android proporciona un método drawArc(). Puede usar esto para obtener su efecto Pie. Suponiendo que guardaron el porcentaje en un campo miembro de llamada mPercent como un flotador entre 0 y 1, un método onDraw()
podría tener este aspecto:
@Override
protected void onDraw(Canvas canvas) {
final float startAngle = 0f;
final float drawTo = startAngle + (mPercent * 360);
// Rotate the canvas around the center of the pie by 90 degrees
// counter clockwise so the pie stars at 12 o'clock.
canvas.rotate(-90f, mArea.centerX(), mArea.centerY());
canvas.drawArc(mArea, startAngle, drawTo, true, mPaint);
// Draw inner oval and text on top of the pie (or add any other
// decorations such as a stroke) here..
// Don't forget to rotate the canvas back if you plan to add text!
...
}
Esto es lo que la vista completado ve como en una aplicación de ejemplo:
Editar
Desde la publicación, he decidido realmente no hay re Cuando necesite implementar una vista personalizada. Simplemente puede usar una propiedad dibujable y de nivel para hacer exactamente lo que se necesita.Hice un gist with the full drawable.
¿quiere decir que quiere un círculo de actividades? como la ronda que se muestra aquí: http://developer.android.com/design/building-blocks/progress.html Si no, ¿puedes mostrar una imagen de lo que quieres decir? –
y también poder actualizar el progreso programáticamente? -lo que quiere decir con esto –
@Renjith K N: Actualizar progress programáticamente: por ejemplo, cada 2 segundos quiero llenar el círculo con un poco de color; es muy similar a lo que está en esta imagen: http://3.bp.blogspot.com/_sfxUTOTXTng/TQxMiOjIkNI/AAAAAAAAoCo/xSeP2-nSXF4/s1600/progressBarStyleHorizontal.png, pero quiero estar en un círculo. – Paul