Android 开发艺术探索笔记之三 -- View 的事件体系

学习内容

  • View 基础
  • 滑动
  • 事件分发机制
  • 滑动冲突

1. View 基础知识

  1. View 定义

    1. View 是 Android 种所有控件的基类,是一种界面层的控件的一种抽象,代表了一个控件
    2. ViewGroup 继承 View,其内部包含了许多个控件,即一组 View
    3. ViewGroup 内部是可以有子 View 的,而这个子 View 同样还可以是 ViewGroup
  2. View 位置参数

    1. Android 种,坐标系的 x 轴和 y 轴的正方向分别是右和下。
    2. View 的位置由其四个顶点决定,分别对应四个属性:top(左上角纵坐标)、left(左上角横坐标)、right(右下角横坐标)、bottom(右下角纵坐标),这些坐标相对于父容器来说的。
    3. Android 3.0 以后,加入 x、y、translationX、translationY,其中 x、y是 View 左上角的坐标,而 translationX、translationY 是 View 左上角相对于父容器的偏移量
  3. MotionEvent 和 TouchSlop

    1. MotionEvent 是手指接触屏幕后所产生的一系列事件。
    2. 一般通过 MotionEvent 对象可以得到点击事件发生的 x 和 y 坐标
      1. getX / getY:相对坐标
      2. getRawX / getRawY:绝对坐标
    3. TouchSlop 指系统能识别出的被认为是滑动的最小距离,通过 ViewConfiguration.get(getContext()).getScaledTouchSlop() 方法来获取。
  4. VelocityTracker、GestureDetector 和 Scroller

    1. VelocityTracker

      1. 速度追踪,用于追踪手指在滑动过程中的速度

      2. 使用

        VelocityTracker velocityTracker = VelociityTracker.obtain();
        velocityTracker.addMovement(event);
        
        //获取速度之前按必须先计算速度,速度指一段时间内手指滑过的像素数
        //速度 = (终点位置 - 起点位置)/ 时间段
        velocityTracker.computeCurrentVelocity(1000);
        int xVelocity = (int)velocityTracker.getXVelocity();
        int yVelocity = (int)velocityTracker.getYVelocity();
        
        
        //不再需要使用的时候,重置并回收内存
        velocityTracker.clear();
        velocityTracker.recycler();
    2. GestureDetector

      1. 手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。

      2. 使用

        //创建 GestureDetector 对象并实现 指定接口如 OnGestureListener 、 OnDoubleTapListener
        GestureDetector mGestureDetector = new GestureDetector(this);
        mGestureDetector.setIsLongpressEnabled(flase);
        
        //接着接管目标 View 的 onTouchEvent 方法
        boolean consume = mGestureDetector.onTouchEvent(event);
        return consume;
      3. 建议:如果只是监听滑动相关,建议自己在 onTouchEvent 中实现,如果要监听双击这种行为的话,那么就使用 GestureDetector

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值