zoukankan      html  css  js  c++  java
  • 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方法配合使用
      • 固定代码
  • 相关阅读:
    HDU 4832(DP+计数问题)
    mongodb安装与使用
    (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)
    dba_dependencies查询结果视图
    情绪一点点
    c#基于这些,你已经看到了?(一)-----谁才刚刚开始学习使用
    九. 200创业教训万元获得--“神刻”这是忽悠?
    初步swift语言学习笔记6(ARC-自己主动引用计数,内存管理)
    采用CSS3 Media Query技术适应Android平板屏幕分辨率和屏幕像素密度
    线程的上下文
  • 原文地址:https://www.cnblogs.com/jesonjason/p/5460819.html
Copyright © 2011-2022 走看看