action actionMasked 区别

本文仅介绍 MotionEvent 中 action actionMasked 两者在使用上的区别

相同点:
    都表示此次MotionEvent的事件类型-手指按下/移动/抬起

不同点:
    action 无法直接识别第二根手指的按下与抬起,而 actionMasked 可以。action 的类型有 按下、移动、抬起,而 actionMasked 有额外两种类型:
        ACTION_POINTER_DOWN - “已经有手指按着了,又按下了新手指”
        ACTION_POINTER_UP - “手指抬起了,但仍有其它手指按着”

使用建议:
    action比actionMasked少了多指识别,适合"检测点击位置"、"记录按下时间"这种只涉及按下抬起的动作。
        对于单指拖拽动作要确保用户只用一根手指,不会出现类似“按下第二根手指后抬起第一根手指,继续拖拽”这种临时多指的动作,否则位置会跳。
    actionMasked比action更全面,无论处理简单拖拽还是复杂的多指事件都适用。

附上事件翻译:

    fun parseActionString(actionMasked: Int): String {
        return when (actionMasked) {
            MotionEvent.ACTION_DOWN -> "按下"
            MotionEvent.ACTION_POINTER_DOWN -> "按下(已有其它触摸点)"
            MotionEvent.ACTION_MOVE -> "移动"
            MotionEvent.ACTION_POINTER_UP -> "抬起(仍留其它触摸点)"
            MotionEvent.ACTION_UP -> "抬起"
            MotionEvent.ACTION_CANCEL -> "取消"
            else -> "未知"
        }
    }

 

 

 

额外(反正写都写了) - 触摸点的简单使用:
    单指动作可以忽略触摸点系列逻辑,触摸点只用于多指动作。
    按下第一根手指便出现第一根触摸点,继续按下第二根手指就会出现第二根触摸点,触摸点可以有很多个,都能用MotionEvent拿到。
    event.pointerCount //屏幕上触摸点总数

    MotionEvent提供了用触摸点索引拿到触摸点信息的API
    event.getX(index)  //通过索引拿坐标

    但触摸点索引会随着触摸点消失和出现变化,不能做触摸点的唯一标识。而触摸点id不会变,所以方案就是当按下时记录触摸点id,用id拿到索引再拿其他信息
    event.getPointerId(pointerCount-1) //拿到刚出现的触摸点id
    event.findPointerIndex(id) //通过id拿索引

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值