【问题标题】:Trouble with multi-touch events多点触控事件的问题
【发布时间】:2023-03-12 04:18:01
【问题描述】:

我正在尝试了解多点触控事件的工作原理,但我的代码未按预期运行。只有当我随后迅速将三个或更多手指放在屏幕上时,才能识别多次触摸:

@Override
public boolean onTouchEvent(MotionEvent event) {

    int x = (int) event.getX();
    int y = (int) event.getY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        doSomeUnimportantStuff();
        return true;

    case MotionEvent.ACTION_POINTER_DOWN:
        for (int i = 0;i < event.getPointerCount()-1;i++) {
            Log.d("Multi-Touch", Float.toString(event.getX(i)));
            return true;
        }
    }
    return true;
}

为什么我放在屏幕上的第二根手指不被识别,为什么我将手指放在屏幕上的速度会影响多次触摸是否被识别?

【问题讨论】:

    标签: java android event-handling touch multi-touch


    【解决方案1】:

    根据 android 文档:

    您应该始终使用 getActionMasked(event) 方法(或者更好的是兼容版本 MotionEventCompat.getActionMasked(event) 来检索 MotionEvent 的操作

    至于知道您是否有单点或多点触摸事件,请使用以下代码 sn-p,同样取自 android 文档。你基本上检查一下是否有多个指针,如果有,那么显然屏幕上的触摸不止一个。

    if (event.getPointerCount() > 1) {
        //MULTI TOUCH EVENT IS TRIGGERED!
        // The coordinates of the current screen contact, relative to 
        // the responding View or Activity.  
        xPos = (int)MotionEventCompat.getX(event, index);
        yPos = (int)MotionEventCompat.getY(event, index);
    
    } else {
        // Single touch event
    
        xPos = (int)MotionEventCompat.getX(event, index);
        yPos = (int)MotionEventCompat.getY(event, index);
    }
    

    【讨论】:

    • hei @gavlaaaaaaaa 我正在使用相同的技术!!!这是处理这些事件的正确方法——因为单点触控和多点触控是有区别的!!! (+1)
    • @MartinFrank 完全正确。根据经验,遵循文档将为您提供一致的实现。虽然它可以通过其他方式实现,但这种方式不会产生意外行为,因为这是该功能的预期实现方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多