У меня есть пользовательский ViewPager
, который обнаруживает taps, long press
и long press up
события с GestureDetector
.Это также позволяет стереть ViewPager
.
Слушатель жестов прост:
private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
override fun onDown(e: MotionEvent?) = true
override fun onLongPress(e: MotionEvent?) {
mTouchListener.invoke(TAPEVENT.LONGTAP)
mWasLongTap = true
}
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
mTouchListener.invoke(TAPEVENT.TAP)
return true
}
override fun onSingleTapUp(e: MotionEvent?): Boolean {
if (mWasLongTap) {
mWasLongTap = false
mTouchListener.invoke(TAPEVENT.LONGTAPUP)
}
return true
}
}
//override view group methods
override fun onTouchEvent(ev: MotionEvent?): Boolean {
super.onTouchEvent(ev)
return mDetector.onTouchEvent(ev)
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
mDetector.onTouchEvent(ev)
return super.dispatchTouchEvent(ev)
}
И у меня есть fragments
внутри ViewPager
.В моем fragments
у меня есть, скажем, представление Button
.Когда моя кнопка нажата, onSingleTapConfirmed
событие также запускается.
Не удается выяснить, что нужно сделать, чтобы ViewPager не обрабатывал событие, если был щелчок дочернего представления фрагмента.Fragment
вид выглядит примерно так:
<CoordinatorLayout>
<View>
</View>
<Button>
</Button>
</CoordinatorLayout>