美文网首页程序员Android开发Android开发经验谈
Android手势传递一般过程及其规则研究

Android手势传递一般过程及其规则研究

作者: 老夫掐指一算z | 来源:发表于2017-09-25 16:18 被阅读0次

    1.手势传递一般过程
    Android 手势传递通过dispatchTouchEvent 、onInterceptTouchEvent(ViewGroup特有)、onTouchEvent
    View手势过程传递为dispatchTouchEvent ----》》onInterceptTouchEvent ----》》onTouchEvent
    多嵌套手势传递过程为如图所示 ParentView 包含 SonView 包含 ChildView


    手势传递过程由最外层 父view 往最内层 子View 传递,view内部执行拦截检验 dispatch 和 intercept,返回false(不拦截处理)的时候,view继续将手势往下传递,直到到达最内层子view后,由子view执行onTouch事件,如果子view不做处理返回false,则向上级父类传递,执行父类onTouch事件。
    2.手势 拦截处理
    2.1 Android 基础手势为 ACTION_DOWN , ACTION_MOVE, ACTION_UP
    ANCTION_MOVE,ACTION_UP以ACTION_DOWN是否做处理而出现,即拦截ACTION_DOWN后,才依次出现ACTION_MOVE,ACTION_UP.

    2.2 onInterceptTouchEvent 拦截处理对象为View, dispatchTouchEvent和onTouchEvent 则面对传递过程。
    onInterceptTouchEvent ACTION_DOWN 返回true,手势不会向ChildView传递,而是执行son的onTouch事件,然后继续向上级传递。

    dispatchTouchEvent ACTION_DOWN 返回true,因为dispatch是对过程进行拦截,并且告诉系统,此处需要进行手势处理,不需要再进行手势传递,所以,系统直接进行下个手势的传递。同理 onTouchEvent 也是如此

    前面说过,手势的传递开始于ACTION_DOWN,当系统接收到手势拦截的反馈之后,才会将ACTIOIN_MOVE,ACTION_UP传递出来,并且确认拦截的当前View中的onInterceptTouchEvent 不再执行。


    所以,个人觉得,做手势拦截和解决手势冲突问题,要明确手势传递的过程还有其本身处理规则,我认为做拦截,先是在Intercept处确定拦截规则,在把具体实现放在touch中。

    相关文章

      网友评论

        本文标题: Android手势传递一般过程及其规则研究

        本文链接:https://www.haomeiwen.com/subject/gurdextx.html