美文网首页
View详解

View详解

作者: kjy_112233 | 来源:发表于2018-10-23 18:19 被阅读0次

一、View事件体系

(1)View位置参数

  • getLeft():左边到父布局左边的距离
  • getTop():顶边到父布局顶边的距离
  • getRight():右边到父布局左边的距离
  • getBottom():底边到父布局顶边的距离
  • getWidth():view的宽度
  • getHeight():view的高度
  • getTranslationX():左上角相对于父容器的偏移量
  • getTranslationY():左上角相对于父容器的偏移量
  • getX():左上角的坐标;getLeft() + getTranslationX()
  • getY():左上角的坐标;getTop() + getTranslationY()
  • 当设置setTranslationX()时,getLeft()不变,getX()改变;设置当setTranslationY()同理
  • 需要注意的是,在onCreate()方法里无法获取到View的坐标参数,这是因为此时View还未开始绘制,全部坐标参数将都是0。

(2)View的触控

  • 从源码中可以看到,MotionEvent封装了如下事件类型。
  • ACTION_DOWN:第一个手指按下
  • ACTION_UP :最后一个手指抬起
  • ACTION_MOVE:手指在屏幕上滑动
  • ACTION_CANCEL:手势被取消,不再接受后续事件
  • ACTION_OUTSIDE :UI边界
  • ACTION_POINTER_DOWN:非第一个手势按下
  • ACTION_POINTER_UP:非最后一个手势抬起
  • ViewConfiguration这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离等。
  • TouchSlop:ViewConfiguration.get(getContext()).getScaledTouchSlop() 获取系统的滑动常量来,判断此时是否属于滑动事件
  • VelocityTracker:速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。
  • GestureDetector:手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。

(3)View的滑动

  • 实现View滑动三种办法
  • 通过View本身提供的scrollTo/scrollBy方法
    两者区别:scrollBy是内部调用了scrollTo的,它是基于当前位置的相对滑动;而scrollTo是绝对滑动,因此如果利用相同输入参数多次调用scrollTo()方法,由于View初始位置是不变只会出现一次View滚动的效果而不是多次。
  • 通过动画给View施加平移效果
    通过改变View的LayoutParams使得View重新布局
  • 使用Scroller:与scrollTo/scrollBy不同,scrollTo/scrollBy过程是瞬间完成的,非平滑;而Scroller则有过渡滑动的效果。
    注意:Scoller本身无法让View弹性滑动,它需要和View的computerScroller方法配合使用。

(4)View事件分发机制

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

(5)View滑动冲突

  • 方向不一致:通过onInterceptTouchEvent方法判断是否拦截事件,默认不拦截。
  • 方向一致::需要外部重写onInterceptTouchEvent方法判断点击位置坐标,来判断是否拦截事件

相关文章

网友评论

      本文标题:View详解

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