以下代码是测试应用程序中使用的实际代码,在扩展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_UP
或MotionEvent.ACTION_CANCEL
。
目前,因为一个手指可以是三个。我的应用程序似乎无法加载给定的图像滚动。
答案 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,但这不太可能......