繁体   English   中英

如何在Android touchlistener中同时检测到触摸屏幕上的次要手指?

[英]how to detect the secondary finger on touching the screen not at same time in android touchlistener?

如何检测屏幕上的其他手指? 例如,我用一根手指触摸屏幕,一段时间后我将第一根手指放在屏幕上,然后用另一根手指触摸屏幕,同时保持第一根手指的原样? 如何在Touch Listener中检测秒针触摸?

从第二个手指开始发送MotionEvent.ACTION_POINTER_DOWN and MotionEvent.ACTION_POINTER_UP 对于第一个手指MotionEvent.ACTION_DOWN and MotionEvent.ACTION_UP使用MotionEvent.ACTION_DOWN and MotionEvent.ACTION_UP

getPointerCount()方法MotionEvent允许您确定在装置上的指针的数目。 所有事件和指针的位置都包含在您在onTouch()方法中收到的onTouch()实例中。

要跟踪来自多个指针的触摸事件,您必须使用MotionEvent.getActionIndex()MotionEvent.getActionMasked()方法来标识指针的索引和此指针发生的触摸事件。

    int action = MotionEventCompat.getActionMasked(event);
// Get the index of the pointer associated with the action.
int index = MotionEventCompat.getActionIndex(event);
int xPos = -1;
int yPos = -1;

Log.d(DEBUG_TAG,"The action is " + actionToString(action));

if (event.getPointerCount() > 1) {
    Log.d(DEBUG_TAG,"Multitouch event"); 
    // 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
    Log.d(DEBUG_TAG,"Single touch event"); 
    xPos = (int)MotionEventCompat.getX(event, index);
    yPos = (int)MotionEventCompat.getY(event, index);
}
...

// Given an action int, returns a string description
public static String actionToString(int action) {
    switch (action) {

        case MotionEvent.ACTION_DOWN: return "Down";
        case MotionEvent.ACTION_MOVE: return "Move";
        case MotionEvent.ACTION_POINTER_DOWN: return "Pointer Down";
        case MotionEvent.ACTION_UP: return "Up";
        case MotionEvent.ACTION_POINTER_UP: return "Pointer Up";
        case MotionEvent.ACTION_OUTSIDE: return "Outside";
        case MotionEvent.ACTION_CANCEL: return "Cancel";
    }
    return "";
}

有关详细信息,请访问Google 处理多点触控手势

如果您需要处理多点触控事件,请检查PointerCount。

    public boolean onTouchEvent(MotionEvent event) {    
        if (event.getPointerCount() > 1) {
            Log.d(DEBUG_TAG,"Multitouch event"); 
            // 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
            Log.d(DEBUG_TAG,"Single touch event"); 
            xPos = (int)MotionEventCompat.getX(event, index);
            yPos = (int)MotionEventCompat.getY(event, index);
        }
...

    }

您可以在此处找到更多信息: https//developer.android.com/training/gestures/multi.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM