当前位置: 首页 > 面试题库 >

pointerIndex超出范围的Android多点触控

乌璞瑜
2023-03-14
问题内容

我有一个触摸事件异常,导致我的游戏在平板电脑(或更具体地,蜂窝)上崩溃…我的游戏在手机上正常运行,而且我没有听说过任何未运行Android
3.0的人都在发生这种情况或更高。这是相关的日志信息…

E/AndroidRuntime(26487): java.lang.IllegalArgumentException: pointerIndex out of range
E/AndroidRuntime(26487):    at android.view.MotionEvent.nativeGetAxisValue(Native Method)
E/AndroidRuntime(26487):    at android.view.MotionEvent.getX(MotionEvent.java:1549)
E/AndroidRuntime(26487):    at kieran.android.asteroids.GameUI.onTouchEvent(GameUI.java:665)
E/AndroidRuntime(26487):    at android.view.View.dispatchTouchEvent(View.java:4616)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)

…这是调用它的代码。对我来说似乎不错,但也许蜂窝中有一个尚未修复的错误?上面日志中的行号665对应于该float x = event.getX(id);行。它可能与我获取which变量的方式有关吗?但它在手机/ 2.3及更低版本上工作正常…

int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;

if(actionCode == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_UP) {
    int which = action >> MotionEvent.ACTION_POINTER_ID_SHIFT;
    int id = event.getPointerId(which);
    float x = event.getX(id);
    float y = event.getY(id);

当我试图将我的游戏也提供给平板电脑用户时,将不胜感激任何帮助/想法。谢谢。


问题答案:

我的问题是,当实际上没有两个ID时,它实际上是在调用event.getX(1)。因此,我确保event.getPointerCount()> =
2有两个ID,并且现在可以正常工作。也许您会有同样的运气!



 类似资料:
  • 问题内容: 为什么使用lambda函数来获取值列表i = 4。在调用lambda期间,不存在封闭范围。函数f已经完成工作并返回了控制(变量i不存在)。 问题答案: Python使用闭包捕获对原始变量的引用。这些对象保留对名称的引用,可以通过该引用访问值。这意味着变量在完成后将继续存在。 您可以在lambda对象的元组中内省此闭包;函数具有相同的属性: 这也是列表中 所有 lambda 都引用val

  • 问题内容: 我有以下代码: 我的索引超出范围错误,我不知道为什么。我声明了大小为10的尺寸。为什么会出现此错误? 问题答案: 您声明了一个,其初始容量为10个元素,但没有向此列表中添加元素,即列表为空。将替换现有元素,但是由于列表中没有元素,因此将引发异常。您必须使用方法在之前添加元素。 表示列表内部维护的数组的开头大小为10。在列表中添加更多元素时,此内部数组的大小可能会更改。

  • 问题内容: 我收到错误 BIGINT UNSIGNED值超出范围在’(1301980250 - 。。 )’ 当我运行查询 删除ORDER BY条件,也将删除错误。我该如何解决? 更新: 日期字段包含UNIX时间戳(例如:1298944082)。我将MySQL从5.0.x升级到5.5.x后开始出现错误 有什么帮助吗? 问题答案: 我最近遇到了这个问题,并找到了最合理的解决方案,可以将任何UNSIGN

  • 我有一个bean,我用它作为传输对象。bean的类定义为- 我正在使用这个bean,在带有Model属性注释的Spring控制器中。对于JSP,我有JSTL。我已经用这样的字段填充了JSP。 当我提交表单时,我得到Java . lang . indexoutofboundsexception:Index:0,Size: 0。

  • 问题内容: 我有一列设置为尝试插入诸如的数字时,它表示超出范围。为什么? 问题答案: 在 MySQL中,An 存储在4个字节上,因此只能包含和之间的值。 大于; 因此它不适合-看起来您将不得不使用 。 有关此信息,请参见MySQL手册的“ 数据类型- 数值类型” 部分 。

  • 我在设置鹰派代理时遇到问题。我已经在 OpenShift 容器中设置了代理,当代理尝试调用在另一个容器中运行的另一个应用程序的 jolokia endpoint时,我收到此错误日志: 也许有人有类似的问题?代理的版本是Hawkular OpenShift Agent:版本:0.1.0。