Klick-Ereignis auf Kreisdiagramm in Android

Ich habe verwendet, um Kreisdiagramm mit Leinwand zu zeichnen .. Es gibt etwa 10 Bögen in Kreisdiagramm .. Ich möchte Klick-Ereignis auf jedem Bogen durchführen. Gibt es eine Möglichkeit, dies zu tun? Oder irgendwie anders

Dies ist meine Kreisdiagrammansicht.

  • Was ist die beste Praxis, um einen Schwimmer auf 2 Dezimalstellen zu runden?
  • Android Maven konnte nicht finden Tool 'aapt'
  • Installationsfehler: Unbekannter Fehler Android App
  • Eclipse wird kein Projekt als Bibliothek erkennen (ActionBarSherlock / ViewPagerIndicator)
  • Wie entschlüssige ich URL in Android-Anwendung
  • Java.lang.OutOfMemoryError: Bitmap-Größe überschreitet das VM-Budget
  • MyView.java

    package android.piechart; import java.util.ArrayList; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.View; public class MyView extends View { private Paint p; private int startX; private int startY; private int radius; private ArrayList<Integer> colors; private ArrayList<Integer> values; public MyView(Context context, AttributeSet attrs) { super(context, attrs); p = new Paint(); p.setColor(Color.BLUE); p.setAntiAlias(true); colors = new ArrayList<Integer>(); values = new ArrayList<Integer>(); startX = 320 / 4; startY = 480 / 8; radius = 320 / 2; colors.add(Color.GREEN); colors.add(Color.CYAN); colors.add(Color.MAGENTA); colors.add(Color.BLUE); colors.add(Color.RED); values.add(0); values.add(1); values.add(3); values.add(0); values.add(2); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.e("", "onDraw() is called..."); float offset = 0; float sum = 0; for (int a = 0; a < values.size(); a++) { sum += values.get(a); } float angle = (float) (360 / sum); Log.e("angle", "" + angle); RectF rectF = new RectF(); rectF.set(getStartX(), getStartY(), getStartX() + getRadius(), getStartY() + getRadius()); for (int i = 0; i < values.size(); i++) { p.setColor(colors.get(i)); if (i == 0) { canvas.drawArc(rectF, 0, values.get(i) * angle, true, p); } else { canvas.drawArc(rectF, offset, values.get(i) * angle, true, p); } offset += (values.get(i) * angle); } canvas.save(); } public int getStartX() { return startX; } public void setStartX(int startX) { this.startX = startX; } public int getStartY() { return startY; } public void setStartY(int startY) { this.startY = startY; } public int getRadius() { return radius; } public void setRadius(int radius) { this.radius = radius; } public ArrayList<Integer> getColors() { return colors; } public void setColors(ArrayList<Integer> colors) { this.colors = colors; } public ArrayList<Integer> getValues() { return values; } public void setValues(ArrayList<Integer> values) { this.values = values; } } 

    Danke im Voraus..

  • Paket Unmarshalling unbekannter Typcode
  • Wie kann ich Text in Sprachdatei als .wav / .mp3 Format in arabischer Sprache im externen Speicher speichern?
  • Java-Bibliothek gegen Android-Bibliothek
  • Fehler: Keine Ressource gefunden, die mit dem Vornamen übereinstimmt (bei 'Icon' mit Wert '@ drawable / icon')
  • Java wurde gestartet, aber zurückgegeben exit code = 13 eclipse
  • Wie man Haufen Erinnerung an Eclipse klar
  • 2 Solutions collect form web for “Klick-Ereignis auf Kreisdiagramm in Android”

    Ich habe meine Frage selbst gelöst …

    MyView.java

     public class MyView extends View { private Paint p; private int startX; private int startY; private int radius; private ArrayList<Integer> colors; private ArrayList<Float> values; Bitmap bitmap; Context mContext; public MyView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; p = new Paint(); p.setAntiAlias(true); colors = new ArrayList<Integer>(); values = new ArrayList<Float>(); startX = 320 / 4; startY = 480 / 8; radius = 320 / 2; colors.add(Color.GREEN); colors.add(Color.CYAN); colors.add(Color.MAGENTA); colors.add(Color.BLUE); colors.add(Color.RED); values.add(5f); values.add(1f); values.add(3f); values.add(5f); values.add(2f); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bitmap); Log.e("", "onDraw() is called..."); float offset = 0; float sum = 0; for (int a = 0; a < values.size(); a++) { sum += values.get(a); } float angle = (float) (360 / sum); Log.e("angle", "" + angle); RectF rectF = new RectF(); rectF.set(getStartX(), getStartY(), getStartX() + getRadius(), getStartY() + getRadius()); for (int i = 0; i < values.size(); i++) { p.setColor(colors.get(i)); if (i == 0) { canvas.drawArc(rectF, 0, values.get(i) * angle, true, p); c.drawArc(rectF, 0, values.get(i) * angle, true, p); } else { canvas.drawArc(rectF, offset, values.get(i) * angle, true, p); c.drawArc(rectF, offset, values.get(i) * angle, true, p); } offset += (values.get(i) * angle); } canvas.save(); } @Override public boolean onTouchEvent(MotionEvent event) { int color = bitmap.getPixel((int) event.getX(), (int) event.getY()); Log.e("", "" + color); if (colors.contains(color)) { Log.e("", "is matching"); if (color == Color.RED) { Toast.makeText(mContext, "Is Red", Toast.LENGTH_SHORT).show(); } if (color == Color.CYAN) { Toast.makeText(mContext, "Is Cyan", Toast.LENGTH_SHORT).show(); } if (color == Color.MAGENTA) { Toast.makeText(mContext, "Is MAGENTA", Toast.LENGTH_SHORT) .show(); } if (color == Color.BLUE) { Toast.makeText(mContext, "Is BLUE", Toast.LENGTH_SHORT).show(); } if (color == Color.GREEN) { Toast.makeText(mContext, "Is GREEN", Toast.LENGTH_SHORT).show(); } } return super.onTouchEvent(event); } public int getStartX() { return startX; } public void setStartX(int startX) { this.startX = startX; } public int getStartY() { return startY; } public void setStartY(int startY) { this.startY = startY; } public int getRadius() { return radius; } public void setRadius(int radius) { this.radius = radius; } public ArrayList<Integer> getColors() { return colors; } public void setColors(ArrayList<Integer> colors) { this.colors = colors; } public ArrayList<Float> getValues() { return values; } public void setValues(ArrayList<Float> values) { this.values = values; } } 

    Ich hoffe, es ist nützlich für andere …

    Kuchendiagramm

    Wenn du ein Canvas benutzt hast, hast du wahrscheinlich einen Verweis auf seine zugrundeliegende Bitmap . Sie könnten Bitmap.getPixel(int x, int y) und die Farbe testen, die es zurückgibt, um zu entscheiden, welcher Abschnitt der Klick war.

    Andernfalls müssen Sie die Berechnung manuell durchführen, um herauszufinden, welcher Keil die x, y-Koordinaten Ihres Klicks enthält.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.