在OnTouchListener中短按(单击)和长按之间进行区分

问题描述 投票:0回答:1

我已经找到了这个答案:Distinguish between long press and short press on a hardware button但是我对OnTouchListener感兴趣。原因是我希望短按并释放(单击)将触发某种行为,而长按(不释放)将触发运动事件,以使用户能够用手指拖动小部件。

所以我正在使用ACTION_MOVE:

val listener = View.OnTouchListener(function = { view, motionEvent ->
    // check if the user gesture upon the view is of moving action
    when (motionEvent.action) {
        MotionEvent.ACTION_DOWN-> {
            // pressed
        }
        MotionEvent.ACTION_MOVE -> {
            view.y = motionEvent.rawY - ((view.height / 2) + 60)
            view.x = motionEvent.rawX - view.width / 2
        }
        MotionEvent.ACTION_UP -> {
            // Released

问题是ACTION_MOVE将立即触发。是否可以选择仅在长按时调用它?我以为可能以某种方式使用时间戳来启用和禁用它,但是有没有更简单的解决方案?

android kotlin ontouchlistener
1个回答
0
投票

Android处理此问题的方法是使用手势检测器。指南主题Detect common gestures讨论了如何执行此操作并提供了示例代码。

您想要在相对较低的触摸侦听器级别上进行操作的唯一原因是,如果要实现的逻辑尚未被库手势检测器之一打包。对您来说幸运的是,长按和拖动是已经支持的手势。

如果仍然要编写自己的逻辑,则适当的手势检测器的源代码可以为您提供一个良好的起点。但是,我强烈不鼓励这样做,因为逻辑可能非常棘手,有很多极端情况需要纠正。

© www.soinside.com 2019 - 2024. All rights reserved.