-1

I have i custom ViewPager that detects taps, long press and long press up events with a GestureDetector. It also allows to wipe ViewPager.

Gesture listener is simple:

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)
    }

And i have fragments inside a ViewPager. In my fragments i have, lets say, a Button view. When my button is clicked onSingleTapConfirmed event is fired too.

Cannot figure out what to do to force ViewPager do not process event if there was a click on a child view of a fragment. Fragment view looks something like this:

<CoordinatorLayout>
    <View>
    </View>
    <Button>
    </Button>
</CoordinatorLayout>
TooLazy
  • 836
  • 4
  • 11
  • 29

1 Answers1

0

I ended up with such a solution. GestureListener is the same, but onTouchEvent is overridden the other way.

override fun onTouchEvent(ev: MotionEvent): Boolean {
        if (ev.action == MotionEvent.ACTION_UP && mWasLongTap) {
            mWasLongTap = false
            mTouchListener.invoke(TAPEVENT.LONGTAPUP)
        }
        return mDetector.onTouchEvent(ev) || super.onTouchEvent(ev)
    }
TooLazy
  • 836
  • 4
  • 11
  • 29