Android多点触控

支持多指操作的时候处理的触摸事件除了DOWN、MOVE、UP、CANCEL之外,还需要关注POINTER_DOWN和POINTER_UP事件

/**
     * A non-primary pointer has gone down.
     */
    public static final int ACTION_POINTER_DOWN     = 5;

    /**
     * A non-primary pointer has gone up.
     */
    public static final int ACTION_POINTER_UP       = 6;

当***“非主要”***的手指落下或者抬起的时候,这两个Action会被触发。所谓的***非主要***指的是:

  • 当有手指按下的时候,在它之前已经有手指按下了,而且还没有抬起,那么当前的手指就是非主要的手指
  • 当有手指抬起的时候,如果还有别的手指没有抬起,那么这个抬起的手指就是非主要的

想要支持接受这两个ACTION,必须要使用getActionMasked方法。

官方处理多指滑动的例子:

ScrollView使用了一个叫做mActivePointerId的东西,用来记录当前活跃的指针,这也就是说,同一时间就算有多个手指在做滑动操作也只会响应mActivePointerId所对应的指针坐标。总体的流程总结如下:

  • ACTION_DOWN:此时没有手指按下或者抬起——直接拿当前ID作为活跃ID
  • ACTION_POINTER_DOWN:把新按下的手指当作活跃ID
  • ACTION_MOVE:根据记录的活跃ID,获取到对应的触摸点坐标
  • ACTION_POINTER_IP:如果刚好抬起的手指是当前活跃的手指,就指定另一根未抬起的手指当作活跃手指(Index是可以复用的,如果当前活跃手指Index为0,那就取Index为1的手指为活跃手指备选,否则取Index为0的手指为活跃手指备选)
  • ACTION_UP:最后一根手指抬起,重置活跃ID为无效
  • ACTION_CANCEL:收到取消动作,处理方式和ACTION_UP一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值