ПланКак захватить события onTouch на двух перекрывающихся видах?
- Контейнер представляет собой относительное расположение содержит два пользовательских представлений: OuterView1 и InnerView2
- Внешний View1 обычай вид, соответствующий размер родителя (полный экран)
- Внутренний View2 также настраиваемое представление, положил поверх OuterView1, перекрывая его.
Как для OuterView1, так и для InnerView2, я хочу захватить эти события касания onSingleTapConfirmed() и onFling(). Область, в которой оба OuterView1 и InnerView2 перекрываются, я хочу, чтобы элемент управления передавался методам сенсорного события обоих представлений.
Я попытался это:
класс Container
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
outerView1.onTouchEvent(ev);
innerView2.onTouchEvent(ev);
return false;
}
OuterView1 класс
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
жест является экземпляром GestureDetector.SimpleOnGestureListener с операторами журнала для onDown(), onFling() и onSingleTapConfirmed()
InnerView2 clas s
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
жест является экземпляром GestureDetector.SimpleOnGestureListener с операторами журнала для onDown(), onFling() и onSingleTapConfirmed() методы
При таком подходе, я последовательно получить обратный вызов в onDown() методы оба вида. Но я не вижу согласованное поведение на onSingleTapConfirmed() и onFling() методы
Когда я постучал в красном круге (на скриншоте) три раза, и я получил три различных поведение
First попробуйте (желаемое поведение)
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()
Вторая попытка (только один вид получает 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()
Третья попытка (один вид получает onFling() и другой получает 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()
Не могли бы вы помочь мне захватить события прикосновения на обоих OuterView1 и InnerView2?
Hi Mistwalker, Я хочу получить onFling(), onSingleTapConfirmed() на обоих видах. Я просто пытался использовать несколько вариантов, включая onInterceptTouchEvent. Я могу получить эту работу, если у меня есть ссылка на нижний вид сверху. ' \t private View outerView = null; \t public void setOuterView (Просмотреть внешний вид) { \t \t this.outerView = внешний вид; \t} \t \t @Override \t общественного логический onTouchEvent (MotionEvent событие) { \t \t gesture.onTouchEvent (событие); \t \t if (внешний вид! = Null) { \t \t \t внешний вид.onTouchEvent (событие); \t \t} \t \t return true; \t} ' @mistwalker Есть ли лучший способ достичь этого? –
Код в моем предыдущем комментарии испорчен. Тот же код можно найти здесь: https://code.google.com/p/ramp-sample/source/browse/android/OverLayView/src/com/example/overlayview/InnerView2.java#55 –
вы хотите сделать то же самое для 2 просмотров при обнаружении срабатывания/одиночного крана? Тогда было бы целесообразно положить их наложенными в FrameLayout и прослушивать жесты на этом FrameLayout. Иначе, если вы хотите делать разные вещи, когда одни и те же события касания наблюдаются на 2 представлениях, тогда да, вам придется отправлять программные события касания. Не уверен, есть ли другие способы достичь этого. – mistwalker