zoukankan      html  css  js  c++  java
  • MotionEvent、多点操作相关

    gesture
    一次gesture 包括从第一个手指头按下到最后一个手指头离开屏幕中的所有Event

    MotionEvent
    多点触摸时,每个点叫一个pointer, MotionEvent含有该时刻,所有pointer的信息。
    每一个pointer有一个唯一的id,这个id是在该pointer刚碰触屏幕的时候赋值的(ACTION_DOWN、ACTION_POINTER_DOWN时),
    有效期直到该点离开屏幕或者取消。但是pointer的序号 pointerIndex 在有效期的每个 MotionEvent 中都是不一定的,
    需要用pointerId 来跟踪某一个手指的所有动作。getPointerId(int pointerIndex) 返回Id,再用 findPointerIndex(int pointerId) 等到index.

    API Level 1:
    ACTION_DOWN    // 第一个手指头按下的时候触发(pointIndex 是0),其他手指头再按的时候是触发 ACTION_POINTER_DOWN
    ACTION_MOVE   
    ACTION_UP      // 最后一个手指头抬起的时候触发(pointIndex 是0),不一定是第一个按下的手指头
    ACTION_CANCEL  // 这一次触屏动作被取消

    API Level 3:
    ACTION_OUTSIDE

    API Level 5:
    ACTION_POINTER_DOWN  // 要得到这几个ACTION 需要: (event.getAction() & MotionEvent.ACTION_MASK)  否则直接用 event.getAction() 会很诡异。
    ACTION_POINTER_UP    // 不是最后一个手指抬起的时候触发

    // 下面这几个在 API Level 8 中已经 deprecated,统一放在 ACTION_POINTER_DOWN、ACTION_POINTER_UP 中,用  ACTION_POINTER_INDEX_MASK 来获取序号
    ACTION_POINTER_1_DOWN
    ACTION_POINTER_1_UP
    ACTION_POINTER_2_DOWN
    ACTION_POINTER_2_UP
    ACTION_POINTER_3_DOWN
    ACTION_POINTER_3_UP

    API Level 5:
    ACTION_MASK   (0x000000ff)
    ACTION_POINTER_ID_MASK         (0x0000ff00)     //在 API Level 8 中deprecated   
    ACTION_POINTER_ID_SHIFT        (0x00000008)     //在 API Level 8 中deprecated   

    API Level 8:
    int getActionMasked()
    int getActionIndex()

    ACTION_POINTER_INDEX_MASK      (0x0000ff00)
    ACTION_POINTER_INDEX_SHIFT     (0x00000008)

    API Level 1:
    getRawX()
    getRawY();
    getX()
    getY()

    API Level 5:
    getX(int pointerIndex)
    getY(int pointerIndex)

    API Level 5:
    getPointerId (int pointerIndex)
    findPointerIndex (int pointerId)
    getPointerCount()


    多点触摸的时候要获得正确的ACTION:
    API Level 5 的时候可以用   event.getAction() & MotionEvent.ACTION_MASK
    API Level 8 的时候可以用: event.getActionMasked()

    其实 getActionMasked() 的实现就是 event.getAction() & MotionEvent.ACTION_MASK
    getActionIndex() 的实现是 (event.getAction() & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT;


    API Level 5 以后
    getAction() 得到的是一个int值,他其实包含了事件类型(actionType)和事件序号(pointerIndex)两个内容

    actionType: 低8位 (0-7位)
    pointerIndex: 8-15位

    而 ACTION_MASK 的值:0x000000ff      
    所以 event.getAction() & MotionEvent.ACTION_MASK 及是取低8位的 actionType 值
    而ACTION_POINTER_ID_MASK的值:0x0000ff00  (API Level 8 以后改名为 ACTION_POINTER_INDEX_MASK,但值是一样的)
    所以 event.getAction() & ACTION_POINTER_INDEX_MASK 就是取第 8-15 位,然后再右移 8 位就得到了 序号的值


     

  • 相关阅读:
    COBBLER无人值守安装
    消息头 Content-Type引发的问题:Jmeter请求中postdata不是期望的,响应数据请求参数为null;已经请求没问题,可变量还是为空
    python爬虫-'gbk' codec can't encode character 'xa0' in position 134: illegal multibyte sequence
    正则表达式30分钟入门教程-链接
    linux常见命令学习汇总3-控制语句
    postman循环操作及响应判断-支持文本多变量输入
    linux常见命令学习汇总2-运算符
    linux常见命令学习汇总1
    Jmeter连接数据库方法与问题:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    mysql学习笔记-ifnull()函数与nullif()函数
  • 原文地址:https://www.cnblogs.com/zijianlu/p/3047609.html
Copyright © 2011-2022 走看看