View的事件体系1

什么是View?

View是Android中所有控件的基类,View是一种界面层的控件的一种抽象。除了View,还有ViewGroup,ViewGroup内部可以包含许多控件,即一组View。在Android中,ViewGroup也继承了View,所以View本身就可以是单个控件也可以是由多个控件组成的一组控件,通过这种关系就形成View的树状结构。

View的位置

View的位置由它的四个顶点决定,对应View的四个属性top(左上角纵坐标)、left(左上角横坐标)、right(右下角横坐标)、bottom(右下角纵坐标),这些坐标都是相对于View的父容器来说的,因此是一种相对坐标。

view.png

width = right – left
height = bottom – top

在View的源码中对应于mLeft、mRight、mTop和mBottom四个成员变量,获取方式:getLeft()、
getRight()、getTop()、getBottom()。View的几个参数:x、y、translationX、translationY,x和y是View左上角的坐标,translationX、translationY是View左上角相对父容器的偏移值(默认为0),View也为它们提供了get/set方法。需要注意的,View在平移过程中,top和left表示原始左上角的位置信息,其值并不会发生改变,此时发生改变的是x、y、translationX、translationY。

x = left + translationX
y =top + translation

MontionEvent和TouchSlop

手指接触屏幕后所产生的一系列事件:

ACTION_DOWN —— 刚接触屏幕
ACTION_MOVE —— 在屏幕移动
ACTION_UP —— 从屏幕上松开的一瞬间

点击屏幕后离开松开:DOWN -> UP

点击屏幕后滑动一会再离开松开:DOWN -> MOVE -> MOVE -> … -> UP

通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY (当前View左上角的x和y坐标),getRawX/getRawY (返回相对手机屏幕左上角的x和y坐标)。

TouchSlop是系统所能识别出的被认为是滑动的最小距离,可用在两次滑动事件中对滑动距离的判断,有助于更好的用户体验。

通过ViewConfiguration.get(getContext()).getScaledTouchSlop()获取

VelocityTracker

用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。

GestureDetector

手势检测,辅助检测单击、滑动、长按、双击等行为。如果只监听滑动相关,可以在onTouchEvent中实现,如果监听双击,那么就使用GestureDetector

Scroller

弹性滑动对象,用于实现View的弹性滑动。当使用View的scrollTo/scrollBy进行滑动时是瞬时的,Scroller可以实现过渡效果,增加用户体验。

实现View滑动

1)通过View本身提供的scrollTo/scrollBy(操作简单,适合对View内容的滑动)
2)通过动画给View施加平移效果 (操作简单,适合没有交互的View和实现复杂动画效果)
3)通过改变View的LayoutParams使View重新布局 (操作稍复杂,适合有交互的View)

实现弹性滑动

1)Scroller
2)通过动画
3)使用延时策略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是View View 是 Android 中所有控件的基类。 View的位置参数 View 的位置由它的四个顶...
    acc8226阅读 1,209评论 0 7
  • 第3章 View的事件体系 [TOC] 3.1 View基础知识 1. View的位置参数 首先来认识一下View...
    反复横跳的龙套阅读 963评论 0 5
  • 本文为Android开发艺术探索的笔记,仅供学习 1 View的基本知识 现在我们先来了解一下View的一些基本知...
    notrynobug阅读 259评论 0 0
  • 你站在二十岁的路口, 你感到很迷茫, 你看不到前方的光, 你每天感受不到乐趣, 你疲于你的工作, 你不想说话, 你...
    时间银钟阅读 129评论 0 0
  • 李笑来老师说七年就是一辈子,看同事的状态。 今天忽然想到,我们如何度过每一天,也就意味着我们如何度过一辈子。 你是...
    沐容心阅读 165评论 0 0