LayoutCome acquisire gli eventi onTouch su due viste sovrapposte?
- Container è un layout relativo contiene due visualizzazioni personalizzate: OuterView1 e InnerView2
- esterno Visualizzazione1 è una visualizzazione personalizzata, corrispondenti dimensioni del genitore (schermo intero)
- interno View2 è anche una visualizzazione personalizzata, di cui in cima a OuterView1 che si sovrappone a esso.
Su OuterView1 e InnerView2, voglio acquisire questi eventi di tocco suSingleTapConfirmed() e onFling(). L'area in cui OuterView1 e InnerView2 si sovrappongono, voglio che il controllo sia passato per toccare i metodi evento di entrambe le viste.
ho provato questo:
classe Container
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
outerView1.onTouchEvent(ev);
innerView2.onTouchEvent(ev);
return false;
}
classe OuterView1
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
gesto è un esempio di GestureDetector.SimpleOnGestureListener con le dichiarazioni di registro per onDown(), onFling() e metodi onSingleTapConfirmed()
InnerView2 clas s
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
gesto è un esempio di GestureDetector.SimpleOnGestureListener con le dichiarazioni di registro per onDown(), onFling() e onSingleTapConfirmed() metodi
Con questo approccio, ho sempre arrivare richiamata in onDown() i metodi di entrambi i punti di vista. Ma io non vedo un comportamento coerente sul onSingleTapConfirmed() e onFling() metodi
Quando ho sfruttato nel cerchio rosso (nello screenshot) tre volte e ho ottenuto tre diversi comportamenti
First provare (comportamento desiderato)
10-14 09:03:14.155: I/OuterView1(27776): OuterView1.onDown() 10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown() 10-14 09:03:14.155: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown() 10-14 09:03:14.460: I/OuterView1(27776): OuterView1.onSingleTapConfirmed() 10-14 09:03:14.460: I/InnerView2(27776): InnerView2.onSingleTapConfirmed()
secondo tentativo (un solo sguardo si onSingleTapConfirmed())
10-14 09:04:11.615: I/OuterView1(27776): OuterView1.onDown() 10-14 09:04:11.615: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:11.615: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:04:11.615: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:11.915: I/OuterView1(27776): OuterView1.onSingleTapConfirmed()
terzo tentativo (Un punto di vista ottiene onFling() e un altro viene onSingleTapConfirmed())
10-14 09:04:04.180: I/OuterView1(27776): OuterView1.onDown() 10-14 09:04:04.180: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:04.180: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:04:04.180: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:04.255: I/InnerView2(27776): InnerView2.onFling() 10-14 09:04:04.480: I/OuterView1(27776): OuterView1.onSingleTapConfirmed()
Potresti aiutarmi a catturare gli eventi tocco su entrambi i OuterView1 e InnerView2?
Hi Mistwalker, voglio ricevere onFling(), onSingleTapConfirmed() su entrambi i punti di vista. Stavo solo provando varie opzioni tra cui onInterceptTouchEvent. Sono in grado di farlo funzionare se ho il riferimento della vista inferiore nella parte più in vista ' \t private View outerView = null; \t public void setOuterView (Visualizza outerView) { \t \t this.outerView = outerView; \t} \t \t @Override \t pubblico onTouchEvent booleana (evento MotionEvent) { \t \t gesture.onTouchEvent (evento); \t \t if (outerView! = Null) { \t \t \t outerView.onTouchEvent (evento); \t \t} \t \t return true; \t} ' @mistwalker C'è un modo migliore per raggiungere questo obiettivo? –
Il codice nel mio commento precedente è incasinato. Lo stesso codice è disponibile qui: https://code.google.com/p/ramp-sample/source/browse/android/OverLayView/src/com/example/overlayview/InnerView2.java#55 –
vuoi fare la stessa cosa per le 2 visualizzazioni quando viene rilevata l'apertura/tocco singolo? Quindi sarebbe utile metterli sovrapposti in un FrameLayout e ascoltare i gesti su quel FrameLayout. Altrimenti se si desidera fare cose diverse quando si osservano gli stessi eventi di tocco sulle 2 viste, allora sì, sarà necessario inviare gli eventi touch programmaticamente. Non sono sicuro se ci sono altri modi per raggiungere questo obiettivo. – mistwalker