44

我正在调试 Android 上的一些触摸处理内容,并试图弄清楚为什么发送到我的视图的 MotionEventonTouchListener包含取消操作。我无法找到任何有关其原因的文档,并希望有人能指出我调试此问题的正确方向 - 错误代码、源代码或一些常识。

4

5 回答 5

60

这是你想要的:

“ACTION_CANCEL 发生在父级控制该动作时,例如,当用户在列表视图上拖得足够多时,它将开始滚动,而不是让您按下其中的按钮。您可以在视图组中找到有关它的更多信息文档:onInterceptTouchEvent。”

希望这是您正在寻找的答案:

资源:运动事件堆栈溢出

于 2012-08-14T21:29:37.960 回答
14

你只需要打电话

requestDisallowInterceptTouchEvent(true);

在父视图上,像这样 -

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            view.getParent().requestDisallowInterceptTouchEvent(true);
            switch(motionEvent.getActio){
            }

            return false; 

         }

来源:onInterceptTouchEvent,onTouchEvent只见ACTION_DOWN

于 2019-04-05T00:14:23.910 回答
2

ACTION_CANCEL由祖先触发,通知所有后代他们失去onTouch控制,它将负责处理下一个onTouch事件。通常它是当后代在onTouchoronTouchEvent方法中返回 true 时引起的,但在那之后,在手势的下一个触摸事件期间,祖先在或方法中返回 trueonInterceptTouchEvent()

[触摸事件流程]

于 2019-07-26T14:41:48.793 回答
0

在我的情况下,TouchDelegate 有所帮助。

https://medium.com/android-news/android-change-touch-area-of-view-by-touchdelegate-fc19f2a34021

private fun changeTouchableAreaOfView(view: View, extraSpace: Int) {
val parent = view.parent as View
Observable.just(parent)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(AndroidSchedulers.mainThread())
        .subscribe {
            val touchableArea = Rect()
            view.getHitRect(touchableArea)
            touchableArea.top -= extraSpace
            touchableArea.bottom += extraSpace
            touchableArea.left -= extraSpace
            touchableArea.right += extraSpace
            parent.touchDelegate = TouchDelegate(touchableArea, button)
        }

/* In case you don't want to use Rx java
parent.post {
    val touchableArea = Rect()
    button.getHitRect(touchableArea)
    touchableArea.top -= extraSpace
    touchableArea.bottom += extraSpace
    touchableArea.left -= extraSpace
    touchableArea.right += extraSpace
    parent.touchDelegate = TouchDelegate(touchableArea, button)
}
*/

}

于 2021-10-26T09:32:53.097 回答
-1

当拖动移出视图矩形时,您会得到 ACTION_CANCEL

于 2012-08-14T21:29:46.193 回答