Wenn ein übergeordnetes Element das Bewegungsereignis abfängt, kann dies nur verhindert werden, indem verhindert wird, dass das übergeordnete Objekt dieses Ereignis abfängt. Dies kann auf zwei Arten gut verwaltet werden.
Ohne spezifischen Code zu sehen und eine generalisierte Lösung zu wollen, würde ich Folgendes vorschlagen.
Ich würde vorschlagen, Ihre Touch-Ereignisse für die Eltern und das Kind der Verwaltung durch die Verwaltung der
requestDisallowInterceptTouchEvent(boolean) und
onInterceptTouchEvent(android.view.MotionEvent) Event-Handler jeder Ansicht/Viewgroup in den betroffenen Ansichten A, B C.
von Wenn Sie Elternabschnitte im Kind nicht zulassen, hilft dies Ihnen dabei, Elternabschnitte abzufangen, die Sie nicht berücksichtigt haben, und auch die untergeordneten Elemente innerhalb eines Elternteils anzupassen und zu variieren.
Dies muss von Ihrem obersten übergeordneten Element Ihrer view/viewGroup verwaltet und über alle untergeordneten und untergeordneten Beziehungen verwaltet werden.
Auf Listviews überprüfen, jedes Element, das eine integrierte Touch-Ereignisse hat.
zu Kind Ansicht
Gehen Sie durch die einzelnen Eltern auf das Kind/Eltern:
android.com/training/gestures/viewgroup
In Bezug auf die problematische Ansicht zu finden, die das Ereignis abfängt, dass mit Ausnahme von der Logik der kann nicht beantwortet werden. Überprüfen Sie methodisch die Handhabung von ontouch in jeder Ansicht/Ansichtsgruppe wie in meinem Diagramm gezeigt.
Es gibt einige weiteren Details in diesen Antworten hier:
https://stackoverflow.com/a/30966413/3956566
https://stackoverflow.com/a/6384443/3956566
Ich bin sicher, dass Sie das verstehen, aber für mich, es ist die einfachste Lösung.
Darüber hinaus müssen wir uns Ihren Code anschauen, um Fehler zu beheben.
Erhalten Sie das erste "ACTION_DOWN" -Ereignis? – Barend
Ja, und eine Reihe von ACTION_MOVE. –
Ich wollte Sie fragen, ob Sie unter dem ersten Event nur die View sehen könnten, aber ich habe inzwischen gemerkt, dass das nicht helfen wird, also machen Sie sich nichts daraus, tut mir leid. – Barend