Android view 触摸事件的分发

对于一个view来说,响应触摸最基本的两个方法:

 @Override
    public boolean onTouch(View v, MotionEvent event) {
        return false;
    }

    @Override
    public void onClick(View v) {
        }

可以看出,onTouch()又一个返回值,经过测试可以得出结论

结论一

  1. Android控件的Listener事件触发顺序是先触发onTouch,其次onClick。
  2. 如果控件的onTouch返回true将会阻止事件继续传递,返回false事件会继续传递。

结论二

  1. 触摸控件(View)首先执行dispatchTouchEvent方法。
  2. 在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行,下面会分析)。
  3. 如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。
  4. 如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。
  5. 如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。

(源码目前看了这么多,待续)

你可能感兴趣的:(Android view 触摸事件的分发)