zoukankan      html  css  js  c++  java
  • Android TouchEvent 传递

    dispatchTouchEvent		事件的分发操作
    TouchEvent			事件处理
    onInterceptTouchEvent	        事件拦截操作
    

    在Activity与View中,TouchEvent的传递会先经过 dispatchTouchEvent,然后再到onTouchEvent
    在ViewGroup中,有点特殊,在dispatchTouchEvent与onTouchEvent之间,还会经过onInterceptTouchEvent这个方法

    MotionEvent.ACTION_DOWN的传递
    	①Activity.dispatchTouchEvent
    	②ViewGroup.dispatchTouchEvent
    	③ViewGroup.onInterceptTouchEvent
    	④View.dispatchTouchEvent
    	⑤View.onTouchEvent (如果这里返回true,后续的MOVE,UP事件都会传递到这里处理,否则继续向下传递)
    	⑥ViewGroup.onTouchEvent (如果这里返回true,后续的MOVE,UP事件会通过ViewGroup.dispatchTouchEvent都会直接传递到这里处理,不在向下传递,否则继续向下传递)
    	⑦Activity.onTouchEvent (如果事件经过了GroupView,View,还是传到了这里,不管这里返回的是false还是true,后续的MOVE,UP事件都会直接通过Activity.dispatchTouchEvent传递到这里)
    

     dispatchTouchEvent方法测试 1

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
    	return (true || false);		// 直接返回true或者false
    }
    

    经测试在dispatchTouchEvent方法,如果没有super.dispatchTouchEvent(event)也就是没有继续父类的实现,
    这里返回true,那么事件都会传到这里结束。
    这里返回false,事件会直接抛到上一层的onTouchEvent事件中
    { // 说明
        在Activity的dispatchTouchEvent返回false,事件直接结束
        在ViewGroup的dispatchTouchEvent返回false,事件会直接传递到Activity.onTouchEvent中
        在View的dispatchTouchEvent返回false,事件会直接传递到ViewGroup.onTouchEvent中
    }

    dispatchTouchEvent方法测试 2

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
    	super.dispatchTouchEvent(event);
    	return (true || false);		// 直接返回true或者false
    }
    

    测试在dispatchTouchEvent方法中加上super.dispatchTouchEvent(event)这一行
    这里返回true,事件会像常规一样去传递,但是最终会传到这一层的onTouchEvent结束,相当于本层的onTouchEvent返回了true
    这里返回false,事件会像常规一样去传递,最终于会在哪一层的onTouchEvent返回true结束,随便事件就会直接到那一层的onTouchEvent

    ViewGroup.onInterceptTouchEvent
    在这个方法中,返回true事件将会被拦截直接传递到ViewGroup的onTouchEvent中处理
    在这个方法中,返回false事件向常规一样处理

    PS:如有错误,欢迎指正,共同学习,多多交流!

    9Tech

  • 相关阅读:
    UNIX网络编程——非阻塞connect
    UNIX网络编程——非阻塞式I/O(套接字)
    UNIX网络编程——使用select 实现套接字I/O超时
    UNIX网络编程——设置套接字超时
    UNIX网络编程——名字与地址转换(gethostbyname,gethostbyaddr,getservbyname,getservbyport,getaddrinfo,getnameinfo函数)
    [Java] Java API文档下载方法
    [Selenium] 在Grid模式下打印出当前Case是在哪台Node上运行
    [Selenium] 针对下拉菜单出现之后又立马消失的问题,通过Javascript改变元素的可见属性
    [Java] 通过XPath获取XML中某个节点的属性
    [Java] 获取当前Project所在的路径
  • 原文地址:https://www.cnblogs.com/smile365/p/3387622.html
Copyright © 2011-2022 走看看