Android多点触控:ACTION_UP并不总是被调用?

Android多点触控:ACTION_UP并不总是被调用?,第1张

概述我开发了一个在视图中处理多点触控的 Android应用程序.我基本上跟踪可能出现的几个MotionEvent,如ACTION_UP,ACTION_MOVE,…我在View类中覆盖的onTouch方法如下所示: public boolean onTouch(View view, MotionEvent event) { int action = event.getAction() & Mo 我开发了一个在视图中处理多点触控的 Android应用程序.我基本上跟踪可能出现的几个MotionEvent,如ACTION_UP,ACTION_MOVE,…我在VIEw类中覆盖的ontouch方法如下所示:
public boolean ontouch(VIEw vIEw,MotionEvent event) {    int action = event.getAction() & MotionEvent.ACTION_MASK;    if (action == MotionEvent.ACTION_DOWN) {        float x = event.getX();        handletouchstart(vIEw,x);    } else if (action == MotionEvent.ACTION_UP) {        float x = event.getX();        handletouchended(vIEw,x);    } else if (action == MotionEvent.ACTION_POINTER_DOWN) {        int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;        float x = event.getX(pointer);        handletouchstart(vIEw,x);    } else if (action == MotionEvent.ACTION_POINTER_UP) {        int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;        float x = event.getX(pointer);        handletouchended(vIEw,x);    } else if (action == MotionEvent.ACTION_MOVE) {        int pointer = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;        float x = event.getX(pointer);        handletouchmoved(vIEw,x);    }    return true;}

在我的手机(三星galaxy S)上,这完美无瑕.对于每个handletouchstart(),都会调用相应的handletouchended().这对我的应用至关重要.它是一个2D侧面滚轮,在屏幕的左下部有一个转向区域.如果 – 由于某种原因 – 当用户从触摸屏抬起手指时未调用handletouchended()方法,则播放器的角色继续运行.

我收到了来自其他设备(如HTC Desire)的玩家的报告,在极少数情况下,即使他们的手指从屏幕上的转向区域抬起,角色确实会继续向一个方向跑.我得出结论,只有在未调用handletouchended()时才会发生这种情况,这反过来意味着不会生成ACTION_UP(或ACTION_POINTER_UP)事件.

是否有设备特定的多点触控支持实现?是否无法保证每个ACTION_DOWN(或ACTION_POINTER_DOWN)MotionEvent都调用适当的ACTION_UP(或ACTION_POINTER_UP)MotionEvent?或者我错过了什么?我的ontouch实现是否正确?

我更广泛的问题是:是否有更好的方法来处理“动作”游戏的多点触控触摸屏输入?我基本上模仿了游戏手柄转向十字架的左右控制.我发现AndroID的UI按钮没有提供足够的灵活性,因为它们无法跟踪onPress和onRelease事件……或者它们呢?

解决方法 你错过了什么. ;)还有一个你应该处理的动作类型:ACTION_CANCEL.当正在进行的手势在某个更高级别中止时发送ACTION_CANCEL – 某些更高级别的组件可能截获了手势并将其取消等等. 总结

以上是内存溢出为你收集整理的Android多点触控:ACTION_UP并不总是被调用?全部内容,希望文章能够帮你解决Android多点触控:ACTION_UP并不总是被调用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1137848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存