Android:SurfaceView停止在第三根手指上绘图

时间:2012-05-28 16:06:14

标签: java android touch multi-touch motion-detection

以下代码是测试应用程序中使用的实际代码,在扩展surfaceView的类上。

@Override
public void onDraw(Canvas canvas)
{       
    canvas.drawCircle(touched_x, touched_y, 50, myPaint);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    touched_x = event.getX();
    touched_y = event.getY();  
    return true;    
}

它基本上绘制了手指所在的位置。测试是否跟踪。

添加第二根手指,您仍然可以追踪第一根手指。但是添加第3个,它就会停止。从那里开始做什么都没关系。除非你移开所有手指并重新开始它不会跟踪。

现在这是一个问题,因为它有时会认为一根手指是三根!我可以克服手指之间的这种测试距离,但是,这仍然无法解决问题。

当第三根手指击中并冻结跟踪时。它不会调用action.Cancel。

我知道释放第一根手指的位置和时间至关重要。

然而,它认为最后一个事件是MotionEvent.ACTION_MOVE。不是MotionEvent.ACTION_UPMotionEvent.ACTION_CANCEL

目前,因为一个手指可以是三个。我的应用程序似乎无法加载给定的图像滚动。

1 个答案:

答案 0 :(得分:0)

发布更多代码。我没有遇到任何问题。也许你忘了在某些情况下使视图无效或者有错误? 有我的完整代码,它的工作原理:

float x1 = -100, y1;

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    canvas.drawColor(Color.WHITE);

    paint.setColor(Color.RED);
    canvas.drawCircle(x1, y1, 30, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    x1 = event.getX();
    y1 = event.getY();

    invalidate();
    return true;
}

也许您的设备上有bugs,但这不太可能......