美文网首页
安卓事件传递机制

安卓事件传递机制

作者: watayouxiang | 来源:发表于2017-05-13 22:19 被阅读18次

事件传递机制

View

  • dispatchTouchEvent():分发事件
  • onTouchEvent():处理事件

ViewGroup

  • dispatchTouchEvent():分发事件
  • onInterceptTouchEvent():拦截事件
  • onTouchEvent():处理事件

事件从树根传递到树叶。比如ViewGroup0里面嵌套了ViewGroup1再嵌套View,当点击View的时候,最先获取到响应是最里层的ViewGroup0。

  • ViewGroup0.onInterceptTouchEvent()是否拦截此事件,返回true拦截,viewGroup0.onTouchEvent()处理事件,返回false交给ViewGroup1.dispatchTouchEcent()处理
  • ViewGroup1.onInterceptTouchEvent()是否拦截此事件,返回true拦截,viewGroup1.onTouchEvent()处理事件,返回false交给View.dispatchTouchEcent()处理
  • View.onTouchEvent()是否处理此事件,true处理此事件,传递结束。false不处理此事件,交给ViewGroup1.onTouchEvent()处理
  • ViewGroup1.onTouchEvent()是否处理此事件,true处理此事件,传递结束。false不处理此事件,交给ViewGroup0.onTouchEvent()处理
  • ViewGroup0.onTouchEvent()是否处理此事件,true处理此事件,传递结束。false不处理此事件,事件丢失

自定义View

  • 实现一个继承自View的类
  • 添加类的构造方法,把布局初始化
  • 把自定义属性定义在attrs.xml中
  • 重写父类的onMeasure(), onLayout(), onDraw()方法

View的绘制流程

View的绘制流程在ViewRoot.java中实现的

判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw)

onMeasure()

onLayout()

onDraw()

如果是viewGroup类型还要: dispatchDraw()

相关文章

网友评论

      本文标题:安卓事件传递机制

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