zoukankan      html  css  js  c++  java
  • android ViewGroup事件分发机制

      1:事件分销过程

      自定义一个LinearLayout,重写dispatchTouchEvent onInterceptTouchEvent onTouchEvent,定义一个按键重写dispathcTouchEvent setOnClickTouchEvent(会重写onTouchListener接口) onTouchEvent。

    正常的事件分销途径是:ViewGroup先捕捉到事件,然后通过以下路径分销事件

     DOWN事件:dispathcTouchEvent -> onIntercepterTouchEvent(不拦截子view事件) -> (view)dispatchTouchEvent -> setOnClickTouchEvent -> (view)OnTouchEvent

    UP事件:(ViewGroup) dispathTouchEvent -> onInterceptTouchEvent -> dispathcTouchEvent -> setOnClickTouchEvent ->(view)OnTouchEvent

    当按下按键如果移动会触发MOVE事件

    当view完整捕捉到down up事件之后会触发SetOnClickListener接口。这就是点击事件。当ViewGroup捕捉到事件之后首先会触发dispatchTouchEvent 然后会判断是否拦截。

      2:拦截

      DOWN事件发生后,ViewGroup在onInterceptTouchEvent如果返回true(默认是false)那么View的MOVE UP都不会发生,事件分发的路径是:

    (ViewGroup)dispatchTouchEvent -> onIterceptTouchEvent -> (ViewGroup)OnTouchEvent,事件最终被ViewGroup消费了。子View并没有捕捉任何事件。

         3:反拦截

    在View的dispathTouchEvent 中用getParent().requestDisallowInterceptTouchEvent(true)。

      4:结论

    1、如果ViewGroup找到处理事件的View,ViewGroup自己的onTouchEvent()不会被触发

    2、通过onInterceptTouchEvent来拦截事件,子View通过getParent().requestDisalloInterceptTouchEvent(true)来阻止队MOVE UP事件的拦截。

     备注:

    requestDisallowInterceptEvent(true)失效

    http://www.cnblogs.com/bhlsheji/p/5307724.html

    这个只不过是自己的流水账,偶尔有一些心得,错误的地方概不负责
  • 相关阅读:
    平时十六测
    平时十五测
    平时十四测
    poj 1486 Sorting Slides
    POJ 3621Sightseeing Cows
    POJ 2728 Desert King
    POJ3111 K Best
    NOIopenjudge 407:Heritage
    POJ#2065. SETI
    HDU 4607 Park Visit
  • 原文地址:https://www.cnblogs.com/ashitaka/p/6044363.html
Copyright © 2011-2022 走看看