java out of range_java.lang.IllegalArgumentException: pointerIndex out of range | 學步園

// java.lang.IllegalArgumentException: pointerIndex out of range

// at android.view.MotionEvent.nativeGetAxisValue(Native Method)

// at android.view.MotionEvent.getY(MotionEvent.java:1989)

// at android.widget.ScrollView.onTouchEvent(ScrollView.java:575)

// at android.view.View.dispatchTouchEvent(View.java:5541)

// at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1963)

// at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1724)

網上說明:

The edge slop code could violate invariants of ScaleGestureDetector,

such as the assumption that if an ACTION_POINTER_DOWN is observed

or if getPointerCount() >= 2, then there must be at least two

active pointers to choose from. But due to the edge slop handling,

it was possible for findNewActiveIndex to return -1 in this

case, resulting in a crash.

解決方案:

在做多點觸控放大縮小,操作自己所繪製的圖形時發生這個異常,如果是操作圖片的放大縮小多點觸控不會出現這個錯誤

這個bug是Android系統原因   所以第一種方式是:

修改frameworks\base\core\jni\android_view_MotionEvent.cpp的android_view_MotionEvent_nativeGetAxisValue方法

注釋掉

if(!validatePointerIndex(env, pointerIndex, pointerCount)) {return0;}

改完後需重新編譯整個系統,然後替換lib庫,重新編譯整個系統一般需要半個多小時,這個方法就比較麻煩了

第二種方法是:捕獲IllegalArgumentException(非法參數異常)異常 即如

privatefloatspacing(MotionEvent event) {

try{

x = event.getX(0) - event.getX(1);

y = event.getY(0) - event.getY(1);

} catch(IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

第二種方法簡單有效

轉自:http://blog.csdn.net/eoeandroida/article/details/7954398

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值