日期:2014-05-16  浏览次数:20630 次

android多点触控 如何判断那个手指离开?
 如题:android多点触控 如何判断那个手指离开?
情况是这样的,我现在要做两个图片放在屏幕的两边,要求能够同时检测手指触摸可移动位置,然后判断是否在设定的范围内
最后图片就做相应的移动或者旋转。

通过以下代码可以实现 判断手指的位置,同时相应的移动或者转动图片。

/**
 * 触屏事件监听
 */
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
int pointerCount = event.getPointerCount();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
// 触摸屏幕时刻
case MotionEvent.ACTION_DOWN:
TouchScreen(x,y);
break;  ;
// 触摸并移动时刻
case MotionEvent.ACTION_MOVE:

for (int i = 0; i < pointerCount; i++) {
// 获取一个触点的坐标,然后开始绘制
int id = event.getPointerId(i);
x = (int) event.getX(i);
y = (int) event.getY(i);
TouchScreen(x,y);   //这里是判断 移动时候的手指是否在我指定的范围内
}
break;
case MotionEvent.ACTION_POINTER_DOWN : 

       break;
case MotionEvent.ACTION_POINTER_UP:

break;
case MotionEvent.ACTION_UP:
Angle = 0;
AdjustSpeed = BitTLeverShiftY;
break;
}
return true;
}

private void TouchScreen(int x,int y) {
if ((x > 400)) {
RotateRad = getRad(BitSteeringWheelCentreX,BitSteeringWheelCentreY, x, y);
AngleLast = getAngle(RotateRad);
Angle = 90-Math.abs(AngleLast);
} else if (x > 55 && x < (55 + mBitThrottleLever.getHeight())) {
if ((y>=BitTLeverShiftY-mBitThrottleScale.getHeight()/2)&&(y<=BitTLeverShiftY+mBitThrottleScale.getHeight()/2))
{
AdjustSpeedLast = y;
AdjustSpeed  = AdjustSpeedLast-mBitThrottleLever.getWidth()/2;
}
}
}

问题一:我不知道应该如何判断手指什么时候离开,具体哪个手指离开,具体位置如何得到,因为相应的手指离开之后 移动的图片会恢复到原来的状态。

问题二:case MotionEvent.ACTION_POINTER_DOWN : 
             break;
case MotionEvent.ACTION_POINTER_UP:
     break;
我个人理解:ACTION_POINTER_DOWN是多手指触发,而ACTION_POINTER_UP 是判断多个触摸手指的情况下,其中一个离开就会触发, 我通过什么方式可以知道离开的手指的位置呢??

------解决方案--------------------
我也正在整这个算法。 
------解决方案--------------------
获取点的Index就可以了, int 
pointerId = (event.getAction()&MotionEvent.ACTION_POINTER_ID_MASK)>>> MotionEvent.ACTION_POINTER_ID_SHIFT;