Android:SurfaceView 停止在第三根手指上绘图
Posted
技术标签:
【中文标题】Android:SurfaceView 停止在第三根手指上绘图【英文标题】:Android: SurfaceView stops drawing on a third finger 【发布时间】:2012-05-28 16:06:13 【问题描述】:以下代码是测试应用程序中使用的实际代码,在扩展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;
它基本上会画出你手指所到之处。 测试它是否跟踪。
添加第二根手指,您仍然可以追踪您的第一根手指。但是添加第三个,它就会停止。你从那里做什么都没关系。除非您移开所有手指并重新开始,否则它不会跟踪。
现在这是一个问题,因为它有时认为一根手指就是三根!我可以克服手指之间的测试距离,但这仍然不能解决问题。
当第三根手指敲击并冻结跟踪时。它不会调用 action.Cancel。
知道第一根手指的释放时间和地点至关重要。
但它认为最后一个事件是MotionEvent.ACTION_MOVE
。不是MotionEvent.ACTION_UP
或MotionEvent.ACTION_CANCEL
。
目前因为一根手指可以是三个。我的应用似乎无法加载给定的图像滚动。
【问题讨论】:
你能在你处理三指触摸的地方展示你的代码吗? 我不处理它,我不在乎第三根手指。除了它停止了第一根手指。 【参考方案1】:发布更多您的代码。我没有遇到任何问题。也许您在某些情况下忘记使视图无效或有错误? 有我的完整代码,它可以工作:
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,但这不太可能......
【讨论】:
我正在使用 One X。它在三星平板电脑上运行良好。很可能是一个错误。以上是关于Android:SurfaceView 停止在第三根手指上绘图的主要内容,如果未能解决你的问题,请参考以下文章
在 Activity 停止和恢复时保存 SurfaceView 的状态
android ViewPager 嵌套SurfaceView切换时卡顿黑屏怎么处理
android videoview和surfaceview的区别