Android Wie erstelle onClick-events im Canvas-Bereich onDraw-Methode
ich gesucht habe um und immer noch keine gute Antwort. Ich habe meine eigene Klasse, die Sie erweitert eine Bildansicht und in der onDraw () - Methode bin ich mit canvas zu zeichnen Kreise auf meinen Bild.
Was ich jetzt machen möchte, ist aber ziehen Sie eine Schaltfläche auf das Bild in verschiedenen Orten und haben ein onClick-Ereignis für Sie, so, wenn der Benutzer die Taste drückt, öffnet sich eine neue Aktivität..
Hier ist was ich habe, so weit..Es zieht die buttons in der richtigen Lage, außer meine onClick-Methode nicht feuern
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
//1.arrayList Points. 2.arrayLists for points in X, 3.arrayList for points in Y
for(int i=0; i<arrayListPoints.size(); i++){
Button b = new Button(mContext);
LinearLayout ll = new LinearLayout(mContext);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(alPoints_x.get(i), alPoints_y.get(i), 0, 0);
ll.addView(b, layoutParams);
//Measure and layout the linear layout before drawing it
ll.measure(MeasureSpec.getSize(ll.getMeasuredWidth()), MeasureSpec.getSize(ll.getMeasuredHeight()));
ll.layout(0, 0, MeasureSpec.getSize(b.getMeasuredWidth()), MeasureSpec.getSize(b.getMeasuredHeight()));
//Finally draw the linear layout on the canvas
ll.draw(canvas);
//create an onClick event for the button
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast msg = Toast.makeText(mContext, "button clicked \n", Toast.LENGTH_LONG);
msg.show();
} //end of public void
});
}
invalidate();
} //end of onDraw()
Sie sollten nicht zu nehmen setOnClickListener() in onDraw(). Sie sollte in onCreate().
ich habe nicht gesehen, dass onCreate() in einer Klasse, die Sie erweitert eine Bildansicht..ich glaube nicht, Sie können
ich habe nicht gesehen, dass onCreate() in einer Klasse, die Sie erweitert eine Bildansicht..ich glaube nicht, Sie können
InformationsquelleAutor Mr X | 2011-07-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich muss sagen, dieser Ansatz kann einen Zweck haben, aber ich sehe es nicht. Warum würde Sie neu erstellen und malen Sie ein layout, jede und jedes mal, wenn Sie Ihre Bild-Ansicht neu gezeichnet wird?
Den Grund der onClick-listener nicht funktioniert, ist, weil Sie das layout ist niemals injiziert in die Aktivitäten von Inhalten sind Sie nur malen (das hätte ich nicht gedacht, hätte auch er sich so Punkte für Kreativität) Auch, da das layout und die Schaltfläche nicht an alles, was ich bin ziemlich sicher, Sie wäre Müll gesammelt, was natürlich irrelevant ist hier, nur zu sagen.
Auch dies geschieht jedes mal, wenn Sie ziehen Ihre Leinwand, das kann nicht gut sein für die Leistung oder Speicher.
Gibt es irgendein Grund, den Sie nicht nur erstellen ein layout mit Ihren Bildansicht und-Taste, und bewegen Sie anschließend die Taste, wenn Sie müssen.
Wenn Sie darauf bestehen, auf die dieser Ansatz die einzige "Lösung" die ich mir denken kann wäre, den überblick zu behalten rect-der-Schaltfläche in Ihrem Bild anzeigen, und dann zu prüfen, wenn eine Bewegung-Ereignis "klicken" innerhalb des Bereichs, die Taste gezeichnet wurde.
Wenn Sie uns sagen, warum Sie versuchen, dies tun, können wir wahrscheinlich eine bessere Lösung als diese Umsetzung, die nicht wirklich notwendig erscheinen, oder rechts, aber haben Sie vielleicht einen triftigen Grund kann ich nicht denken.
Update
So, ich denke, basierend auf Ihre Kommentare, was Sie tun möchten, ist
Setzen ein AbsoluteLayout container über Ihre Karte (fill parent) oder legen Sie einfach die Karte in einen solchen container, so oder so.
Dann setzen buttons in diesem layout-container (via xml-oder programmgesteuert, spielt eigentlich keine Rolle)
Dann setzen Sie die layout x/y/Anzeigeeigenschaften, die Tasten
Also in meinem onDraw - ich will jetzt zeichnen Tasten auf der Oberseite meiner Karte Bild in bestimmten x - /y-Koordinate Standorten und haben auch action-Listener für diese Tasten. In meine activity-Klasse habe ich meine Instanz dieser canvas-Klasse, um den Inhalt anzeigen als auch. Auch diese Leinwand ist nur gezeichnet für meine MapImageView die anhand dieser customImageView (erweitert Bildansicht)
ok siehe oben modifiziert Antwort, ich glaube, das würde die Arbeit für Ihre und einfacher sein als gut.
Danke. Ich sehe, was du meinst. Also in meine activity-Klasse, statt mit einem LinearLayout (hält das Bild) , verwenden Sie ein AbsoluteLayout statt, und fügen Sie meine buttons dynamisch in der Aktivität anstelle der onDraw-Methode in der CustomImageView
Yep, das ist richtig
InformationsquelleAutor Idistic