Android开发艺术探索(三)——View的事件体系详解手机开发

一、View基础知识

主要介绍内容有:View的位置参数、MotionEvent和TouchSlope对象、VelocityTracker、GestureDetector和Scroller对象

1、什么是View

  • View是Android中所有控件的基类
  • View是一种界面层的控件的一种抽象,它代表了一个控件。

    2、View的位置参数

  • 四个属性
    • top 左上角纵坐标 getRight()
    • left 左横 getLeft()
    • right 右横 getRight()
    • bottom 右纵 getBottom()
  • 额外的几个参数
    • x View左上角的坐标
    • y
    • translationX 相对父容器的偏移量
    • translationY
  • 使用注意
    • View在平移的过程中,top和left表示的是原始左上角的位置信息,其值并不会发生改变,此时改变的是x,y,translationX和translationY

      3、MotionEvent & TouchSlop

  • MotionEvent
    • 典型的事件类型有
      • ACTION_DOWN 手指刚接触屏幕
      • ACTION_MOVE 手指在屏幕上移动
      • ACTION_UP 手指从屏幕上松开的一瞬间
    • getX/getY
      • 返回的是当前View左上角的坐标
    • getRawX/getRawY
      • 返回的是相对于手机屏幕上的坐标
  • TouchSlop
    • 概念
      • 是系统所能识别出的被认为是滑动的最小距离 是一个常量,和设备有关
    • 获取
      • ViewConfiguration.get(getContext()).getScaledTouchSlop();
    • 源码位置
      • frameworks/base/core/res/res/values/config.xml

        4、VelocityTracker & GestureDetector & Scroller

  • VelocityTracker(速度追踪)
    • 用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度
    • 使用过程
      1. 在view的onTouchEvent方法中追踪当前单击事件的速度
        VelocityTracker velocityTracker = VelocityTracker.obtain();
        velocityTracker.addMovement(event);
      2. 获取当前速度
        VelocityTracker.computeCurrentVelocity(1000);
        int xVelocity = (int)velocityTracker.getXVelocity();
        int yVelocity = (int) velocityTracker.getYVelocity();
      3. 不用时,重置并回收内存
        velocityTracker.clear();
        velocityTracker.recycle();
  • GestureDetector(手势检测)
    • 用于检测用户的单击、滑动、长按、双击等行为
    • 如何使用?
      1. 创建一个GestureDetector对象并实现OnGestureListener接口
      2. 接管目标View的onTouchEvent方法
      3. 有选择的自行选择 实现OnGestureListener 和 OnDoubleTapListener中的方法
    • 常用方法
      • onSingleTapUp(单击)
      • onFling(快速滑动)
      • onScroll(推动)
      • onLongPress(长按)
      • onDoubleTap(双击)
  • Scroller(弹性滑动对象)
    • 需要和View的computeScroll方法配合使用
    • 固定代码

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/6002.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论