永远不会调用onInterceptTouchEvent的ACTION_UP和ACTION_MOVE

时间:2014-01-22 16:10:03

标签: android

日志永远不会记录 ACTION_UP ACTION_MOVE (我从代码示例中删除了缩短版)

以下是我的缩短版代码:

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



}

1 个答案:

答案 0 :(得分:8)

onInterceptTouchEvent事件后,您的ACTION_DOWN方法未被调用,因为您在true方法中返回onTouchEvent。因此,所有其他事件都在onTouchEvent而不是onInterceptTouchEvent中发送:

  

使用此功能需要一些注意,因为它有一个相当复杂的   与View.onTouchEvent(MotionEvent)的交互,并使用它需要   以正确的方式实现该方法以及此方法。   活动将按以下顺序收到:

     

您将在此处收到失败事件。向下事件将被处理   要么是这个观点组的孩子,要么是给自己的   onTouchEvent()方法来处理;这意味着你应该实施   onTouchEvent()返回true,所以你将继续看到其余部分   手势(而不是寻找父视图来处理它)。也,   从onTouchEvent()返回true,您将不会收到任何内容   跟随onInterceptTouchEvent()中的事件和所有触摸处理   必须在onTouchEvent()中发生,就像正常

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