多点触碰与单点触碰的冲突处理思路
与我思路大致相同的博文 http://blog.csdn.net/q610098308/article/details/51324244
原理可以看他的博文
float startX = 0;
int state = 0;//防止手指移动反复更新 只在手指按下和滑动时 启动
float endX;
int mode = 0;
@Override
public boolean onTouch(View arg0, MotionEvent event) {
//为了防止多点的触碰影响到单点的滑动 因此在多点触碰条件中处理
switch (event.getAction() & event.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN: // 第一个手指按下事件
mode =0;
startX = event.getX();
state = 1;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP: // 手指放开事件
mode = 0;
endX = event.getX();
float endY = event.getY();
state = 0;
//TODO something
endX = 0;//回归0
break;
case MotionEvent.ACTION_MOVE:
if(mode == 0)// 是一个手指拖动
{
if (state == 1) {
endX = event.getX();
float changeXDistance = (float)((endX - startX) / 1.3);//计算误差
//两点坐标的距离绝对值
if (Math.abs(changeXDistance) > 100) {
//TODO something
startX = endX;
state=0;
}
}
}else if (mode ==1) // 两个手指滑动
{
}
break;
case MotionEvent.ACTION_POINTER_DOWN: // 第二个手指按下事件
mode = 1;
break;
}
return true;
}