Android VIewGroup手柄触摸,子手柄点击

时间:2018-09-27 14:53:24

标签: android kotlin viewgroup

我有一个自定义的ViewPager,它使用taps, long press检测long press upGestureDetector事件。它还允许擦除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>

1 个答案:

答案 0 :(得分:0)

我最终得到了这样的解决方案。 GestureListener是相同的,但是onTouchEvent被替代。

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