J'ai besoin de dessiner Pie Chart (Dynamic Values) .Comment créer le graphique sans utiliser d'API tierce.Dessiner Graphique à secteurs dans Android?
Répondre
Vous pouvez utiliser la propriété org.achartengine.chart.PieChart
d'aChartEngine qui s'étend sur roundChart
.
Pour plus de détails vous pouvez aller à achartengine-0.7.0-javadocs/org/achartengine/chart/PieChart.html
Ce sera disponible lorsque vous téléchargez les javadocs de aChartEngine.org
Ci-dessous montre simple diagramme circulaire et vous devez étendre pour plus de fonctionnalités ... valeurs [] et tableau de couleurs doit être égale ....
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);
}
}
}
}
}
J'ai une bibliothèque assez simple qui est open source que vous pouvez utiliser le plus susceptible d'atteindre vos objectifs (https://github.com/saulpower/ExpandablePieChart).
Fonction de base pour dessiner un graphique à secteurs, l'entrée est un tableau de couleurs et un tableau de valeurs. Les tableaux doivent avoir la même taille. Les tranches sont callulées en fonction des valeurs de chaque diapositive et de la somme de toutes les valeurs. Vous pouvez également utiliser des valeurs flottantes. Cette solution est fournie comme une fonction d'assistance légère. C'est facile à utiliser, et vous n'avez pas besoin de définir une classe pour cela.
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;
}
}
fonction de base pour dessiner un graphique à secteurs, l'entrée est un tableau de couleurs et un tableau de valeurs. Les tableaux doivent avoir la même taille. Les tranches sont appelées en fonction des valeurs de chaque diapositive et de la somme de toutes les valeurs. – Waldschrat
Déplacez cette explication dans votre réponse (Il y a un bouton Modifier ci-dessus). Vous voudrez peut-être justifier pourquoi votre réponse est meilleure que celle actuellement acceptée. – Sinkingpoint
salut, c'est bon, comment mettriez-vous du texte avec des pourcentages sur chaque tranche? – user3290180
La réponse de Ramesh fonctionne presque correctement. Cependant le pépin blanc à la fin est causé par des erreurs d'arrondi de la coulée float à int. Il suffit de changer le type de "temp" pour flotter, et enlever le cast à (int) à la fin lorsque "temp + = value_degree [i-1]" et c'est parfait.
Si vous cherchez quelque chose juste pour tracer un joli graphique alors je vous suggère d'utiliser MPAndroidChart. Si vous cherchez quelque chose de plus léger, vous pouvez l'utiliser.
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
}
}
Vous venez de créer une liste de PieDataSet.PieEntry
objets, puis créer un PieDataSet
. Une fois que vous avez créé votre objet PieDataSet
, vous pouvez simplement appeler pieDataSet.draw(canvas, x, y, radius)
pour dessiner un camembert sur une toile. Une chose à garder à l'esprit est de s'assurer que vos valeurs de jeu de données totalisent 1.0f (100%), sinon vous n'obtiendrez pas le résultat désiré.
- 1. Comment dessiner graphique à secteurs manuellement dans Android?
- 2. Api pour dessiner graphique en android
- 3. Comment afficher les étiquettes sur un graphique à secteurs
- 4. Comment créer un graphique à secteurs dans Crystal Reports joint?
- 5. Dessiner le graphique dans UIView
- 6. WPF Toolkit Valeurs de remplissage du graphique à secteurs
- 7. Comment créer un graphique à secteurs en Java
- 8. Diagrammes à secteurs dynamiques
- 9. Graphique utilisant scrollview dans Android
- 10. La légende du graphique à secteurs de pchart et le graphique ne sont pas corrélés
- 11. Diagrammes à secteurs dynamiques
- 12. Diagramme à secteurs avec données vides
- 13. Comment interagir avec une tranche dans un graphique à secteurs Core Plot?
- 14. Comment formater un résultat HTTPService dans Flex afin qu'il soit accessible pour un graphique à secteurs?
- 15. Quelqu'un peut-il m'aider à dessiner un graphique à barres ...?
- 16. Vous cherchez un graphique à secteurs interactif à utiliser avec GWT (sans communication externe)?
- 17. Dessiner un lien et un graphique sur un autre graphique
- 18. Génération d'URL pour l'étiquette de section du graphique à secteurs à l'aide de l'API JFree Chart
- 19. Flex: - dessiner un camembert dans une fenêtre pop-up
- 20. dessiner un graphique dans un JPanel dans Net Beans
- 21. Javascript bibliothèque graphique pour dessiner une région
- 22. Android - Dessiner un rectangle
- 23. Android Dessiner le temps
- 24. Android ImageView dessiner
- 25. Dessiner à partir de vieux canevas - Android
- 26. Android, Canvas, dessiner l'image
- 27. Comment dessiner le graphique dans Android basé sur sa taille et la taille
- 28. Comment dessiner un graphique en PHP?
- 29. Android Dessiner la question
- 30. overlay carte android dessiner
hii je dessine le graphique en utilisant votre code.it fonctionne très bien, mais je hv petit problème.je reçois ling blanc de cordinate d'un côté.so plz me dire quel est le problème? – Google
@Google vous devez réinitialiser la variable "temp" dans OnDraw. J'imagine. – hrules6872
@Ramesh Akula Merci. Ça a marché pour moi. Je voulais afficher du texte à l'intérieur des fragments qui sont créés. Pouvez-vous m'aider s'il vous plaît avec ceci. – codemaniac