android手势类事件响应

来源:互联网 发布:3a算法工程师怎么样 编辑:程序博客网 时间:2024/05/20 03:06

android的屏幕手势事件的响应大概经过如下几个步骤:

   首先,android系统将事件传递给Activity.dispatchTouchEvent(MotionEvent e)方法,由该方法进行分发给各个根view,所谓的根view即布局管理器Layout,分发给布局管理器的Layout.dispatchTouchEvent(MotionEvent e)方法,

   然后又该方法继续分发给各个子视图。接着传递到Layout方法中的onInterceptToucheEvent(MotionEvent e),该方法为事件拦截器,若返回的值为true,表示拦截该事件,Layout中的组件将接受不到任何事件,事件直接传递给                            onTouchEvent(MotionEvent e)接口中处理,若返回false,表示不拦截,Layout中的组件将接受到事件。

注意,此时交给onTouchEvent处理,若返回值为false时,该方法只处理第一个事件,后续的事件将不再处理,例如:我在屏幕上点击一个,产生Action_Down,Action_up,Action_onSingleTapUp三个事件,则onTouchEvent只处理Action_Down事件,后面的两个忽略。若返回值为true时,所有事件都会处理。因为onTouchEvent方法处理事件比较简单,所以android增加了一个手势类GestureDetector,

该类的构造方法接收一个SimpleOnGestureListener的对象,该对象实现了GestureDetector.OnGestureListener接口和GestureDetector.OnDoubleListener接口,其实所谓的实现其实方法中什么都没有做,这个由程序员自己完成相应的操作。

程序员实现接口后,实例化一个SimpleOnGestureListener对象作为参数传递给GestureDetector,然后在onTouchEvent方法中调用GestureDetector.onTouchEvent()方法,就可以处理不同的事件了。

还应该注意的是:通过GestureDetector.onTouchEvent()方法的返回值,可以获得你的手势的具体形式,这是通过修改GestureDetector.OnGestureListener接口中的各种处理事件的方法实现的。例如:OnGestureListener.onDown(),OnGestureListener.onScroll().OnGestureListener.onSingleTapUp(),OnGestureListener.onFling()。

各自的返回值即作为GestureDetector.onTouchEvent()方法的返回值。


注意:onInterceptTouchEvent方法是自上而下拦截事件,true为拦截,false为不拦截

           当注册了监听onTouch()后,不再调用自身的onTouchEvent()方法。

           当没有注册监听onTouch(),调用自身的onTouchEvent方法,返回值为false则进一步往上面传递事件,返回值为true时,不将事件往上传递

     所以,onInterceptTouchEvent是控制事件往下传递,onTouchEvent()是控制事件向上传递的。







原创粉丝点击