Android多点触摸支持

Android多点触摸支持,android,multi-touch,Android,Multi Touch,我想知道Android多点触摸支持是否可靠?我读到它有一些问题 我还想知道,如何定义自定义多点触控手势?例如:3个手指旋转或3个手指静止,第四个手指移动 我遇到过一些资源(developer.android.com上的手势或MotionEvent),但没有明确说明 问候, Zdenek我在API中进行了深入研究,找到了一种执行捏/反向捏等手势的方法,因此我相信您描述的手势是可能的——只需要弄清楚如何编写它们。下面我粘贴了一个我实现的反向挤压示例。我希望只有在水平方向的情况下,夹点才能注册。它不是

我想知道Android多点触摸支持是否可靠?我读到它有一些问题

我还想知道,如何定义自定义多点触控手势?例如:3个手指旋转或3个手指静止,第四个手指移动

我遇到过一些资源(developer.android.com上的手势或MotionEvent),但没有明确说明

问候,


Zdenek

我在API中进行了深入研究,找到了一种执行捏/反向捏等手势的方法,因此我相信您描述的手势是可能的——只需要弄清楚如何编写它们。下面我粘贴了一个我实现的反向挤压示例。我希望只有在水平方向的情况下,夹点才能注册。它不是非常干净或可重用的代码,但它应该可以帮助您向前迈进。它在安卓2.0.x上运行。我读过multi-touch在早期版本中可能存在问题。该示例是我从活动的
onTouchEvent
中调用的一个类,将事件转发给该类

public class HorizontalReversePinchDetector {

    public boolean onTouchEvent(MotionEvent e) {

        int pointerCount = e.getPointerCount();

        if(pointerCount != 2) {
            Log.d(GESTURE, "not pinching - exactly 2 fingers are needed but have " + pointerCount);
            clearPinch();
            return false;
        }

        int firstIndex = e.getX(0) < e.getX(1) ? 0: 1;
        int secondIndex = e.getX(0) < e.getX(1) ? 1: 0;

        Finger currentLeftFinger = new Finger(e.getX(firstIndex), e.getY(firstIndex));
        Finger currentRightFinger = new Finger(e.getX(secondIndex), e.getY(secondIndex));

        float yDifference = Math.abs(currentLeftFinger.getY() - currentRightFinger.getY());
        if(yDifference > 80) {
            Log.d(GESTURE, "not pinching - fingers too vertically-oriented");
            clearPinch();
            return false;
        }

        if(initialLeftFinger == null) {
            initialLeftFinger = currentLeftFinger;
            initialRightFinger = currentRightFinger;
            Log.d(GESTURE, "not pinching, but might be starting a pinch...");
            return false;
        }

        float leftFingerDistance = initialLeftFinger.getX() - currentLeftFinger.getX();
        float rightFingerDistance = currentRightFinger.getX() - initialRightFinger.getX();

        float xDistanceBetweenFingers = Math.abs(currentLeftFinger.getX() - currentRightFinger.getX());
        if(xDistanceBetweenFingers < minimumDistanceBetweenFingers) {
            Log.d(GESTURE, "pinching, but fingers are not far enough apart...");
            return true;
        }

        if(leftFingerDistance < minimumDistanceForEachFinger) {
            Log.d(GESTURE, "pinching, but left finger has not moved enough...");
            return true;
        }
        if(rightFingerDistance < minimumDistanceForEachFinger) {
            Log.d(GESTURE, "pinching, but right finger has not moved enough...");
            return true;
        }

        pinchCompleted();
        return true;
    }

    private void pinchCompleted() {
        Log.d(GESTURE, "pinch completed");
        if(pinchListener != null) pinchListener.onPinch();
        clearPinch();
    }

    public static interface OnPinchListener {
        void onPinch();
    }

    private void clearPinch() {
        initialLeftFinger = null;
        initialRightFinger = null;
    }

    public void setPinchListener(OnPinchListener pinchListener) {
        this.pinchListener = pinchListener;
    }

    private static class Finger {

        private Finger(float x, float y) {
            this.x = x;
            this.y = y;
        }

        public float getX() {
            return x;
        }

        public float getY() {
            return y;
        }

        private float x;
        private float y;
    }

    private Finger initialLeftFinger;
    private Finger initialRightFinger;
    private OnPinchListener pinchListener;
    private static final float minimumDistanceForEachFinger = 30;
    private static final float minimumDistanceBetweenFingers = 50;
}
公共类水平反转检测器{
公共事件(运动事件e){
int pointerCount=e.getPointerCount();
如果(指针计数!=2){
Log.d(手势,“不捏-只需要两个手指,但有”+指针计数);
clearPinch();
返回false;
}
int firstIndex=e.getX(0)80){
Log.d(手势,“不要捏——手指太垂直”);
clearPinch();
返回false;
}
if(initialLeftFinger==null){
initialLeftFinger=当前LeftFinger;
initialRightFinger=当前RightFinger;
Log.d(手势“不是捏,但可能是开始捏…”);
返回false;
}
float leftFingerDistance=initialLeftFinger.getX()-currentLeftFinger.getX();
float rightFingerDistance=currentRightFinger.getX()-initialRightFinger.getX();
float xDistanceBetweenFingers=Math.abs(currentLeftFinger.getX()-currentRightFinger.getX());
if(XDdistance between finger

关于可靠性,本规范是完全可靠的。同样,仅在Android 2.0.x上。我没有在平台的其他版本上测试过它。

太好了!谢谢你的回复,这正是我一直在寻找的东西。