Necesito dibujar un gráfico circular (valores dinámicos). Cómo crear el gráfico sin utilizar API de terceros.Dibujar gráfico circular en Android?
Respuesta
Puede usar aChartEngine's org.achartengine.chart.PieChart
que se extiende roundChart
.
Para más detalles se puede ir a achartengine-0.7.0-javadocs/org/achartengine/chart/PieChart.html
Este estará disponible al descargar los javadocs de aChartEngine.org
continuación muestra sencilla gráfico circular y que tiene que extenderse durante más características ... valores [] y colores matriz debe ser igual ....
public class Demo extends Activity {
/** Called when the activity is first created. */
float values[]={300,400,100,500};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout linear=(LinearLayout) findViewById(R.id.linear);
values=calculateData(values);
linear.addView(new MyGraphview(this,values));
}
private float[] calculateData(float[] data) {
// TODO Auto-generated method stub
float total=0;
for(int i=0;i<data.length;i++)
{
total+=data[i];
}
for(int i=0;i<data.length;i++)
{
data[i]=360*(data[i]/total);
}
return data;
}
public class MyGraphview extends View
{
private Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
private float[] value_degree;
private int[] COLORS={Color.BLUE,Color.GREEN,Color.GRAY,Color.CYAN,Color.RED};
RectF rectf = new RectF (10, 10, 200, 200);
int temp=0;
public MyGraphview(Context context, float[] values) {
super(context);
value_degree=new float[values.length];
for(int i=0;i<values.length;i++)
{
value_degree[i]=values[i];
}
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
for (int i = 0; i < value_degree.length; i++) {//values2.length; i++) {
if (i == 0) {
paint.setColor(COLORS[i]);
canvas.drawArc(rectf, 0, value_degree[i], true, paint);
}
else
{
temp += (int) value_degree[i - 1];
paint.setColor(COLORS[i]);
canvas.drawArc(rectf, temp, value_degree[i], true, paint);
}
}
}
}
}
que tienen una biblioteca bastante simple que es de código abierto que se podía uso más probable para lograr sus propósitos (https://github.com/saulpower/ExpandablePieChart).
Función básica para dibujar un gráfico circular, la entrada es una matriz de colores y una matriz de valores. Ellos arreglos deben tener el mismo tamaño. Las rebanadas se calculan en función de los valores de cada diapositiva y la suma de todos los valores. Por supuesto, también puede cambiar a valores flotantes. Esta solución se proporciona como una función de ayuda ligera. Es fácil de usar, y no es necesario definir una clase para ello.
public static void drawPieChart(Bitmap bmp, int[] colors, int[] slices){
//canvas to draw on it
Canvas canvas = new Canvas(bmp);
RectF box = new RectF(2, 2,bmp.getWidth()-2 , bmp.getHeight()-2);
//get value for 100%
int sum = 0;
for (int slice : slices) {
sum += slice;
}
//initalize painter
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1f);
paint.setStyle(Style.FILL_AND_STROKE);
float start = 0;
//draw slices
for(int i =0; i < slices.length; i++){
paint.setColor(colors[i]);
float angle;
angle = ((360.0f/sum) * slices[i]);
canvas.drawArc(box, start, angle, true, paint);
start += angle;
}
}
función básica para dibujar un gráfico circular, la entrada es una matriz de colores y una matriz de valores. Ellos arreglos deben tener el mismo tamaño. Las divisiones se invocan en función de los valores de cada diapositiva y la suma de todos los valores. – Waldschrat
Mueva esta explicación a su respuesta (Hay un botón de edición arriba). Es posible que desee justificar por qué su respuesta es mejor que la actualmente aceptada. – Sinkingpoint
hola, está bien, ¿cómo pondrías texto con porcentajes en cada porción? – user3290180
La respuesta de Ramesh funciona casi bien. Sin embargo, la falla blanca en el extremo es causada por errores de redondeo del flotante de fundición a int. Simplemente cambie el tipo de "temperatura" para flotar, y elimine el molde a (int) al final cuando "temp + = value_degree [i-1]" y es perfecto.
Si está buscando algo solo para trazar una bonita tabla, le sugiero que utilice MPAndroidChart. Si estás buscando algo más liviano podrías usar esto.
public class PieDataSet {
private List<PieEntry> mPieEntries;
private Paint mCurrentPaint;
public PieDataSet(List<PieEntry> entries) {
mPieEntries = entries;
mCurrentPaint = new Paint();
}
public void draw(Canvas canvas, float x, float y, float radius){
RectF target = new RectF(x - radius, y - radius, x + radius, y + radius);
float startAngle = 0;
for(PieEntry entry : mPieEntries){
int arc = (int)(entry.getValue() * 360);
mCurrentPaint.setColor(entry.getColor());
canvas.drawArc(target, startAngle, arc, true, mCurrentPaint);
startAngle = startAngle + arc;
}
}
public static class PieEntry {
private float mValue;
private int mColor;
public PieEntry(float value, int color){
mValue = value;
mColor = color;
}
//region Getters {}
public float getValue() {
return mValue;
}
public int getColor() {
return mColor;
}
//endregion
//region Setters {}
public void setValue(float mValue) {
this.mValue = mValue;
}
public void setColor(int mColor) {
this.mColor = mColor;
}
//endregion
}
}
Usted acaba de crear una lista de objetos PieDataSet.PieEntry
, a continuación, crear una PieDataSet
. Una vez que haya creado su objeto PieDataSet
, puede simplemente llamar al pieDataSet.draw(canvas, x, y, radius)
para dibujar un gráfico circular en un lienzo.
Algo a tener en cuenta es asegurarse de que todos los valores de los conjuntos de datos sumen hasta 1.0f (100%), de lo contrario no obtendrá el resultado deseado.
- 1. ¿Cómo dibujar un gráfico circular manualmente en Android?
- 2. achartengine Android gráfico circular sencilla
- 3. Api para dibujar un gráfico en android
- 4. ¿Dibujar texto en vista circular?
- 5. Dibujar sector circular
- 6. mostrar números en el gráfico circular
- 7. Dibujar un gráfico web
- 8. Cómo dibujar un sector circular en un lienzo html5?
- 9. Cómo hacer un gráfico circular en CSS
- 10. etiquetas superpuestas en el gráfico circular flot
- 11. Cómo crear barra de progreso circular (gráfico circular) como indicador - Android
- 12. ¿Cómo dibujar texto en lienzo?
- 13. g.raphael.js efecto de degradado en el gráfico circular
- 14. Cómo dibujar gráficos en Android?
- 15. Android: ¿Cómo volver a dibujar un elemento gráfico?
- 16. Android Circular Gradient Alpha Mask
- 17. evento, haga clic en gráfico circular en el androide
- 18. Highcharts: Actualizando un gráfico circular con setData()
- 19. ¿Cómo escoger colores para un gráfico circular?
- 20. Gráfico con nodos en Android
- 21. ¿Cómo dibujar un gráfico en PHP?
- 22. Gráfico dinámico personalizado en Android
- 23. android circular gallery?
- 24. Dibujar círculo en Android
- 25. ¿Deseas repartir una parte del gráfico circular en d3?
- 26. Cómo mostrar información sobre herramientas en el gráfico circular jqplot
- 27. creando una vista Circular en android
- 28. Color de fondo para el gráfico circular de Jqplot
- 29. Cómo reducir el tamaño del gráfico circular KendoUI?
- 30. cómo hacer que Google gráfico circular fondo api transperent
hii dibujo el gráfico usando su código. Funciona muy bien, pero tengo un pequeño problema. Estoy recibiendo ling lingindia de un lado. Así que dígame ¿cuál es el problema? – Google
@Google debe reinicializar la variable "temperatura" en OnDraw. Supongo. – hrules6872
@Ramesh Akula Gracias. Me funcionó. Quería mostrar un texto dentro de los fragmentos que se crean. Puede ayudarme con esto. – codemaniac