1

Sagen wir, ich habe eine Liste (RecyclerView) mit einigen Elementen, wenn ein Benutzer ihren Finger auf eines dieser Elemente legt, muss ich einen völlig anderen Bildschirm zeigen, und basierend auf der Position wo a Benutzer nimmt ihren Finger von diesem anderen Bildschirm, meine Anwendung führt verschiedene Aktionen aus.Ändern Sie Ansichten basierend auf Berührungsereignisse

Ich habe es geschafft, etwas mit Fragment Transaktionen zu erreichen (I ersetzen die Fragment enthält die RecyclerView mit der Fragment, dass verschiedene Bildschirm enthält, wenn Sie erhalten eine ACTION_DOWNMotionEvent in einem der Artikel Liste View s), aber das Problem ist, dass die zweite Fragment kann ACTION_UP oder andere MotionEvent nicht erhalten, weil ACTION_DOWN wurde nie auf es gesendet, und ich brauche eine Möglichkeit zu wissen, wenn ein Benutzer ihren Finger nimmt.

Gibt es eine Möglichkeit, mein gewünschtes Verhalten zu erreichen (vielleicht mit einer anderen Technik als das Ersetzen Fragments)?

Antwort

1

Wenn Sie in onTouchEvent true für Ihre Ansicht zurückgeben, hat es die vollständige Kontrolle über den Rest der Geste bis einschließlich ACTION_UP MotionEvent.

Wenn Sie die Koordinaten der ACTION_UP vom ursprünglichen Listener erhalten und sie dann dorthin senden, wo Sie diese Informationen verarbeiten möchten, wird es tun, was Sie wollen.

Eine andere Technik wäre das Überschreiben von onInterceptTouchEvent() in einer ViewGroup. Dadurch können Sie das Ereignis direkt abfangen, nachdem das Ansichtselement das ACTION_DOWN MotionEvent empfangen hat. Der Rest dieser Geste einschließlich der ACTION_UP wird dann zu den Viewgruppen onTouchEvent() umgeleitet.

+1

Ich denke, beide Vorschläge lösen mein Problem. Zuerst habe ich nicht daran gedacht, Ereigniskoordinaten vom ursprünglichen Listener zu erhalten, aber solange es sich um Anzeigekoordinaten handelt, ist es in jedem Listener gleich, sodass ich das zweite 'Fragment' nur als Hinweis für einen Benutzer zeigen kann, aber nimm die tatsächlichen Koordinaten vom ersten 'Fragment'. Ich werde auch in Erwägung ziehen, das Touch-Event abzufangen und zu sehen, welche Technik mir besser passt. Wie auch immer, vielen Dank! – Salivan

Verwandte Themen