美文网首页
Android开发艺术探索 章3

Android开发艺术探索 章3

作者: defalt的简书 | 来源:发表于2021-02-05 16:24 被阅读0次

View的事件体系

View的定义:

可以把View理解成组合模式里的叶子结点和有枝节点的关系,本质ViewGroup和View都是View,遍历的时候不用关注是怎样的结点.

View的位置参数:

  1. View的宽高和坐标关系:width = right - left,height = top - bottom。
  2. View在平移过程中,top和left表示的是原始左上角的位置信息,其值不会改变,发生改变的是x、y、translationX、translationY这四个参数,x是View左上角的坐标,translation是view移动后相对于父容器(左上角)的偏移量, x = left + translationX。y的原理相同.

MotionEvent典型事件:ACTION_DOWN, ACTION_MOVE, ACTION_UP。

TouchSlop:系统所能识别的被认为是滑动的最小距离,用这个常量来判断用户的滑动是否达到阈值,提升用户体验。获取方法:ViewConfiguration.get(getContext()).getScaledTouchSlop()。

VelocityTracker加速度追踪:一般建议类似ViewPager这样的空间,将时间间隔设置为1000(也就是1秒)时,加速度阈值设为1000-2000左右体验较好.

View的滑动:

当某个ViewGroup在内部的layout的时候设置margin为负值的View时,0点会在可见top上方的高度(或宽度)为margin的地方. 参考headerView的设置。竖向滑动时,上滑ScrollY不断增加(所以应该传正值),下滑时ScrollY不断减少(所以应该传负值);同理,横向滑动时,左滑ScrollX不断增加,右滑不断减少。注意View动画的View移动只是位置移动,其本身还是在原来位置,会导致一些bug。

View拦截事件

如果当前View拦截事件,就交给自己的onTouchEvent去处理,否则就丢给子View继续走相同的流程。

  1. onTouchListener优先级高于onTouchEvent。
  2. 事件传递顺序:Activity -> Window -> View,如果View都不处理,最终将由Activity的onTouchEvent处理。
  3. 一些结论:拦截的一定是事件序列;不消耗ACTION_DOWN,则事件序列都会由其父元素处理;只消耗ACTION_DOWN事件,该事件会消失,消失的事件最终会交给Activity来处理;requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的事件分发过程,除了ACTION_DOWN;

相关文章

网友评论

      本文标题:Android开发艺术探索 章3

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