Android: ViewGroup, wie abfangen MotionEvent und dann den Versand an den Gegner oder Essen es auf Nachfrage?
Gegeben, dass es eine ViewGroup mit mehreren Kindern. Für diese ViewGroup, würde ich mag, um es der Verwaltung alle MotionEvent für alle seine Kinder, was sagt die VG wird
1. in der Lage sein zu fangen alle Ereignisse, bevor Sie versandt werden, um den Gegner (Kinder)
2. VG werden zuerst verbraucht das Ereignis, und zu bestimmen, wenn die weitere Zusendung Veranstaltung Zielgruppe Kind
3. UNTEN,,, ich würde gerne sehen, wie Sie als relativ unabhängig, was bedeutet, VG Essen konnte nach UNTEN, sondern geben VERSCHIEBEN und BIS zu den Kindern.
Habe ich gelesen SDK guide "Umgang mit UI-Event", ich wusste, dass Ereignis-Listener Handler, ViewGroup.onInterceptTouchEvent(MotionEvent), und Anzeigen.onTouchEvent(MotionEvent).
Hier ist mein Beispiel,
@Override
public boolean onInterceptTouchEvent (MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
return super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
else {
if (!consumeEvent(event)) {
//TODO: dispatch to target since I didn't want to eat event
//return this.dispatchTouchEvent(event); //infinite loop!!!
}
}
return super.onTouchEvent(event);
}
Essen zu können einige der Ereignisse, ich muss true zurückgeben, im oben genannten beiden Methoden beim DOWN-Ereignis aufgetreten ist, da SDK gesagt. Dann konnte ich sehen, BEWEGEN und bis in onTouchEvent. Allerdings, in meinem Fall, ich habe keine Ahnung, wie der dispatch-event für Kinder.
Oben dispatchTouchEvent führte zu Endlosschleife, was verständlich war, da die VG selbst könnte das Ziel sein. Ich kann nicht sagen, das würde sein Ziel in diesem moment, MotionEvent nicht einen Tipp geben, so dispatchTouchEvent war völlig nutzlos.
Mir jemand helfen? Danke.
InformationsquelleAutor fifth | 2011-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keinen einfachen Weg, um die Quelle zu finden
View
ausonInterceptTouchEvent
, noch gibt es einen Weg zu "versenden" diese Ereignisse. Sie können VersandKeyEvent
s, aber nichtMotionEvent
s.Einen gemeinsamen Weg, um mit
MotionEvent
s (z.B. für drag und drop) ist zu behandeln, dieMotionEvent.ACTION_DOWN
Veranstaltungen, die von den verschiedenenView
s (durch dieonTouch
Rückruf nach der ImplementierungOnTouchListener
), und dieMotionEvent.ACTION_MOVE
Veranstaltungen durch die ElternViewgroup
'sonInterceptTouchEvent
Methode.Aber einige Lokomotiven, die sagen viel mehr als ein paar Worte. Es ist ein sehr schönes Beispiel dafür, was ich hier sage: http://doandroids.com/blogs/tag/codeexample/
Wenn Sie mit der ACTION_DOWN-event in der Ansicht selbst, dann Sie können speichern, welche Ansicht begann es an anderer Stelle und verwenden Sie die variable für weitere Aktionen. Das Ereignis gebunden ist, zu der gleichen Ansicht, bis fertig ist, die durch eine ACTION_UP oder eine ACTION_CANCEL Aktionen.
Wenn Sie brauchen, um zu verfolgen die Ansicht, und führen Sie eine Aktion auf der ViewGroup während der ACTION_DOWN, dann schlage ich vor, Sie fügen Sie eine öffentliche Methode in der ViewGroup (z.B.
public boolean handleActionDown (View v, MotionEvent e)
aufgerufen wird, aus der onTouch-RückrufIch antwortete auf meine Antwort, weil es war zu lang für einen Kommentar.
ok, habe deine Idee. Die Speicherung von Ziel-anzeigen erste ist der Schlüssel, später bin ich in der Lage zu versenden.
yep. Es ist entweder das, oder ab zu raten, Ihre Sicht auf der Grundlage der x-und y-Koordinaten, die können chaotisch sein.
Ich denke an die Installation eines betreuenden OnTouch-listener für jede Ansicht. Die mühsame Arbeit wäre, die ich Durchlaufen jedes Kind, wenn es eine view-Komponente Hinzugefügt, und ich muss rekursiv tun.
InformationsquelleAutor Aleadam