onInterceptTouchEvent 的 ACTION_UP 和 ACTION_MOVE 永远不会被调用

2024-01-10

日志从不记录ACTION_UP or 行动_移动(我从代码示例中删除了它以缩短)

这是我的代码的缩短版本:

 public class ProfileBadgeView extends LinearLayout {

    Activity act;

    public ProfileBadgeView(Context context) {
        super(context);
    }

    public ProfileBadgeView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ProfileBadgeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void initView(Activity act) {
        //..init
    }


    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            logIntercept("ACTION DOWN");
        } else if (ev.getAction() == MotionEvent.ACTION_UP) {
            logIntercept("ACTION_UP");
        }
        return false;
    }

    @Override
        public boolean onTouchEvent(MotionEvent ev) {
        return true;
}


    private void logIntercept(Object obj) {
        Log.i(this.getClass().getSimpleName() + " INTERCEPT :", obj.toString());
    }



}

Your onInterceptTouchEvent之后不调用方法ACTION_DOWN因为你回来而发生的事件true in onTouchEvent方法。所以所有其他事件都被发送进来onTouchEvent并且不在onInterceptTouchEvent还有更多:

使用这个函数需要小心,因为它有一个相当复杂的 与 View.onTouchEvent(MotionEvent) 交互,使用它需要 以正确的方式实施该方法以及该方法。 事件将按以下顺序接收:

您将在这里收到 down 事件。 down事件将被处理 要么由该视图组的子视图组提供,要么提供给您自己的视图组 onTouchEvent() 方法来处理;这意味着你应该实施 onTouchEvent() 返回 true,因此您将继续看到其余部分 手势(而不是寻找父视图来处理它)。还,通过从 onTouchEvent() 返回 true,您将不会收到任何 onInterceptTouchEvent() 中的以下事件和所有触摸处理 必须像平常一样在 onTouchEvent() 中发生.

http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent) http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

onInterceptTouchEvent 的 ACTION_UP 和 ACTION_MOVE 永远不会被调用 的相关文章

随机推荐