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_UPMotionEvent.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的区别

android surfaceview 怎么用

android videoview和surfaceview的区别

Android--SurfaceView使用详解