美文网首页
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