Android VIewGroup сенсорный ручка, дочерний дескриптор нажмите - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть пользовательский 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>

1 Ответ

0 голосов
/ 29 сентября 2018

Я закончил с таким решением.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)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...