简单多点测试

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; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值