RecyclerView 单元格可以使用 RecyclerViews 触摸事件吗?

Can a RecyclerView cell consume RecyclerViews touch events?

我有一个 RecyclerView,其中所有单元格都是自定义视图。在我的自定义视图中,我有一些看起来像按钮的东西。并且当用户长按这个按钮时he/she可以做出滑动手势。

但是当用户滑动 RecyclerView 时会上下滚动。

我的自定义视图可以在 RecyclerView 开始滚动之前使用这个滑动手势吗?

在我的自定义视图中,我实现了 GestureDetector. It works so far for click and long press. I also overwrote boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 和 return true 以指示滚动事件已消耗但 RecyclerView 仍然滚动。

编辑:

这是我的代码(片段):

class EventListView(context: Context, attrs: AttributeSet) : View(context, attrs),
    GestureDetector.  OnGestureListener, GestureDetector.OnDoubleTapListener {

    private val gestureDetector: GestureDetector


    init {

        gestureDetector = GestureDetector(context, this)
    }


    override fun onTouchEvent(event: MotionEvent?): Boolean {
        var result = gestureDetector.onTouchEvent(event);
        if (!result) {
            if (event?.action == MotionEvent.ACTION_UP ) {
                Timber.i("ACTION_UP")

                animateAlpha(alpha, 0)
                result = true;
            }
        }

        return result;
    }


    //
    // OnGestureListener
    //

    override fun onDown(e: MotionEvent): Boolean {
        return isInside(e)
    }

    override fun onShowPress(e: MotionEvent) {
        if (isInside(e))
            showPressState()
    }

    override fun onSingleTapUp(e: MotionEvent): Boolean {
        return false
    }

    override fun onLongPress(e: MotionEvent) {

    }

    override fun onScroll(e1: MotionEvent, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
        return true
    }

    override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
        return true
    }

    //
    // OnDoubleTapListener
    //

    override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
        return false
    }

    override fun onDoubleTap(e: MotionEvent): Boolean {
        return false
    }

    override fun onDoubleTapEvent(e: MotionEvent): Boolean {
        return false
    }
}

好的,我知道了。当我在自定义视图中调用 getParent().requestDisallowInterceptTouchEvent(true) 时,RecyclerView 停止滚动