Android艺术|View的事件体系

View的事件体系

文章目录

1)什么是View
2)View的位置参数
3)View的滑动
4)View事件分发机制
5)View滑动冲突


View基础
  • 什么是View
    • View是所有控件的基类,包括ViewGroup
    • ViewGroup代表控件的集合,其中包括多个View控件,将整个界面的控件形成了一个树形结构,上层控件负责测量与绘制下层的控件,并传递交互事件
  • View的位置参数
  • 在这里插入图片描述
    • 屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向
    • View的四个属性,top、left、right、bottom
    • width=right-left,height=bottom-top
    • 可以通过View的get方法获取上述属性
    • Android 3.0后,增加参数 x、y、translationX、traslationY
      • x与y是View左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量
    • MotionEvent
      • 手指触摸屏幕锁产生的一系列事件
      • ACTION_DOWN:手指刚接触屏幕
      • ACTION_MOVE:手指在屏幕上滑动
      • ACTION_UP:手指在屏幕上松开的一瞬间
    • TouchSlop
      • 滑动的最小距离
      • 常量,和设备有关,通过ViewConfiguration.get(getContext()).getScaledTouchSlop().
    • VelocityTracker:速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。
    • GestureDetector:手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。
View的滑动
  • 1.通过View本身提供的scrollTo/scrollBy方法
    • scrollBy是基于当前位置的相对滑动,而scrollTo是绝对滑动
  • 2.通过动画给View施加平移效果:主要通过改变View的translationX和translationY参数来实现。View动画的View移动只是位置移动,并不能真正的改变view的位置,而属性动画可以。
  • 3.通过改变View的LayoutParams使得View重新布局
  • 实现View弹性滑动
    • 1.使用Scroller
      • Scroller本身并不能实现View的滑动,需要配合View的computeScroll方法才能实现弹性滑动的效果。
    • 2.通过动画
      • 动画本身就是一种渐近的过程,因此通过它来实现的滑动天然具有弹性效果
    • 3.使用延时策略
      • 通过发送一系列延时消息从而达到一种渐进式的效果,可以使用Handlere或View的postDelayed方法,也可以使用线程的sleep方法。
  • View事件分发机制
    • MotionEvent事件分发的过程
    • 点击事件的传递顺序:Activity(Window)->ViewGroup->View
    • 三个主要方法:
      • dispatchTouchEvent:进行事件的分发(传递)
      • onInterceptTouchEvent:对事件进行拦截
      • onTouchEvent:进行事件处理
  • View滑动冲突
    • 在一个界面里存在内外两层可同时滑动的情况时,会出现滑动冲突现象
    • 可以根据滑动的距离或者滑动的角度去判断
    • 外部拦截法
      • 指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,否则就不拦截,需要重写父容器的onInterceptTouchEvent方法,在内部做出相应的拦截。
    • 内部拦截法
      • 指父容器不拦截任何事件,而将所有的事件都传递给子容器,如果子容器需要此事件就直接消耗,否则就交由父容器进行处理。
      • 使用requestDisallowInterceptTouchEvent方法。

参考

《Android开发艺术与探索》
要点提炼|开发艺术之View
View滑动与实现滑动的几种方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值