android时间分发
2017-03-16 15:21:09   24  举报             
     
         
 Android事件分发流程图
    作者其他创作
 大纲/内容
 true
  会调用其中的方法
    在DOWN的时候已经建立起了链表,所以直接找到消费的子View,将事件给它
  否
  PhoneWindow(superDispatchTouchEvent())
  clickable或者longclickable之中有一个为true
  调用该子View的dispatchTouchEvent()
  false(ViewGroup不会去拦截)
  是
  true(ViewGroup之后不能拦截)
  在遍历过程中通过getTouchTarget()判断当前的子View是否在mFristTuchTarget这条链表上。
  true(ViewGroup会去拦截)
  Android事件分发流程图
  函数调用栈一直返回true
  表示我们之前该ViewGroup已经拦截过事件或者事件到底然后返回
  disallowIntercept
  传入null调用dispatchTransformedTouchEvent()
  判断子View是否为0(不为0就倒序遍历,这是为了实现 后添加在界面上的先被触发)
  UP或者MOVE
  如果本View或者子View处理成功,那么子View会放入节点列表
  设置了onTouchListener
  事件被消耗
  调用super.dispatchTouchEvent()
  找到了最终消耗事件的View
  false
  view处于不可用状态?
  return
  View设置了TouchDlegate?
  经过递归调用之后,找到了消耗事件的子View
  false(ViewGroup之后允许拦截)
  onInterceptTouchEvent(ev)
  DecorView(super.dispatchTouchEvent())
  ViewGroup(dispatchTouchEvent())
  Activity(dispatchTouchEvent())
  找到子View,传入该View调用dispatchTransformedTouchmentEvent()
  mFristTouchTarget == null
  运行其方法
  Down(重置之前所有标记位,所以disallowIntercept为false)
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 