zoukankan      html  css  js  c++  java
  • android 的事件分配机制

    android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
    1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent
    2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent ,仅ViewGroup及其子类有
    3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

    当TouchEvent发生后,

    1、首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ;

    2、然后由最顶层 view的 dispatchTouchEvent 方法进行分发,

    3、如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理;

    4、如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,

    5、如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,

    6、如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,

    7、由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

    8、如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。

    注意:

    Activity中分配的逻辑

    public boolean dispatchTouchEvent(MotionEvent ev) 
    {
    if (ev.getAction() == MotionEvent.ACTION_DOWN)
         { onUserInteraction(); }
    if (getWindow().superDispatchTouchEvent(ev))//在这里交给View层处理
         {
                return true;
            }
            return onTouchEvent(ev); // 如果View层没有处理,则在这里处理
    }

    参考链接:http://blog.sina.com.cn/s/blog_7ec412690100yti3.html

    http://www.cnblogs.com/frydsh/archive/2012/11/08/2760408.html

  • 相关阅读:
    java解析xml实例——获取天气信息
    Wordpress可以用来做什么?
    Unity3D 快捷键
    Unity3D 快捷键
    OAuth和OpenID的区别
    OAuth和OpenID的区别
    PHP中require和include的区别
    PHP中require和include的区别
    iOS检测QQ是否安装
    iOS检测QQ是否安装
  • 原文地址:https://www.cnblogs.com/lipeil/p/3013355.html
Copyright © 2011-2022 走看看