您的位置:首页 > 移动开发 > Android开发

Android的Touch事件分发机制简单分析

2015-02-06 14:37 302 查看
相关Touch事件的方法

1、public boolean dispatchTouchEvent(MotionEvent ev)              
 ————事件分发方法,分发Event所调用

2、public boolean onInterceptTouchEvent(MotionEvent ev)    ————事件拦截方法,拦截Event所调用

3、public boolean onTouchEvent(MotionEvent event)       ————事件响应方法,处理Event所调用

拥有上述事件的类

1、Activity类(Activity及其各种继承子类)

    dispatchTouchEvent()、onTouchEvent()

2、ViewGroup类(LinearLayout、FrameLayout、ListView等…..)

    dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()

3、View类(Button、TextView等…..)

    dispatchTouchEvent()、onTouchEvent()

需要特别注意一点就是ViewGroup中额外拥有onInterceptTouchEvent()方法,其他两个方法为这三种类所共同拥有

方法的简单用途解析

我们可以发现这三个方法的返回值都为boolean类型,其实它们就是通过返回值来决定下一步的传递处理方向。

1、dispatchTouchEvent()  ——用来分发事件所用

  该方法会将根元素的事件自上而下依次分发到内层子元素中,直到被终止或者到达最里层元素,该方法也是采用一种隧道方式来分发。在其中会调用onInterceptTouchEvent()和onTouchEvent(),一般不会去重写。

  返回false则不拦截继续往下分发,如果返回true则拦截住该事件不在向下层元素分发,在dispatchTouchEvent()方法中默认返回false。

2、onInterceptTouchEvent()  ——用来拦截事件所用

  该方法在ViewGroup源代码中实现就是返回false不拦截事件,Touch事件就会往下传递给其子View。

  如果我们重写该方法并且将其返回true,该事件将会被拦截,并且被当前ViewGroup处理,调用该类的onTouchEvent()方法。

3、onTouchEvent()  ——用来处理事件

  返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View)

  返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android