========== 4     如何解决java.lang.IllegalArgumentException: pointerIndex out of range?

今天遇到一个bug:java.lang.IllegalArgumentException: pointerIndex out of range

	at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:1981)
at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:91)
at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:219)
at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:1901)
at cn.xs8.app.activity.news.ui.CustomViewPager.onTouchEvent(CustomViewPager.java:29)
at android.view.View.dispatchTouchEvent(View.java:7263)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2235)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1932)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1977)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1427)
at android.app.Activity.dispatchTouchEvent(Activity.java:2428)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1925)
at android.view.View.dispatchPointerEvent(View.java:7443)
at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3603)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3531)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4783)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4743)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4895)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4863)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4917)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:546)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

在网上很多关于该bug的处理都众说纷纭,我在这里不再详述该bug产生的原因,下面给出一种在4.1的机子上测试通过的方案:

1.让你的view(可能是ScrollView,WebView,MapView等),创建一个子view继承于它们中的某一个;

2.重写onInterceptTouchEvent 和onTouchEvent方法

3.try catch 该两个方法,形如下面:

try{

super.onInterceptTouchEvent(MotionEvent ev)

} catch(ILLegalArgumentException ex) {

}

return false;

try{

super.onTouchEvent(MotionEvent ev)

} catch(ILLegalArgumentException ex) {

}

return false;

========= 3

在ViewPager里缩放图片过小出的异常,自己看了网上的方法:

1.让你的view(可能是ScrollView,WebView,MapView等),创建一个子view继承于它们中的某一个;

2.重写onInterceptTouchEvent 和onTouchEvent方法

3.try catch 该两个方法,形如下面:

try{

super.onInterceptTouchEvent(MotionEvent ev)

} catch(ILLegalArgumentException ex) {

}

return false;

try{

super.onTouchEvent(MotionEvent ev)

} catch(ILLegalArgumentException ex) {

}

return false;

Tips:但是有点问题,如果是用ViewPager的话,onInterceptTouchEvent 返回false会导致ViewPager翻页出现BUG

  1. import android.content.Context;
  2. import android.support.v4.view.ViewPager;
  3. import android.util.AttributeSet;
  4. import android.view.MotionEvent;
  5. /**
  6. * ViewPager类,(此类只是为了防止双指缩放过小而出异常)
  7. * @author
  8. *
  9. */
  10. public class ImageViewPager extends ViewPager {
  11. public ImageViewPager(Context context) {
  12. super(context);
  13. }
  14. public ImageViewPager(Context context, AttributeSet attrs) {
  15. super(context, attrs);
  16. }
  17. @Override
  18. public boolean onInterceptTouchEvent(MotionEvent arg0) {
  19. boolean b = false;
  20. try {
  21. b = super.onInterceptTouchEvent(arg0);
  22. } catch (Exception e) {
  23. }
  24. return b; //网上看的方法是直接返回false,但是会导致ViewPager翻页有BUG
  25. }
  26. @Override
  27. public boolean onTouchEvent(MotionEvent arg0) {
  28. try {
  29. super.onTouchEvent(arg0);
  30. } catch (Exception e) {
  31. }
  32. return false;
  33. }
  34. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. >
  6. <!-- ViewPager用自己定义的 -->
  7. <com.ghl.components.ImageViewPager
  8. android:id="@+id/show_image_viewpager"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:background="#4000"
  12. />
  13. <include layout="@layout/image_selector_titlebar"/>
  14. <include layout="@layout/image_selector_bottom"/>
  15. </RelativeLayout>

我是这样处理ViewPager翻页就没问题了。

======= 2

转载请注明:http://blog.csdn.net/aaawqqq

Android   java.lang.IllegalArgumentException: pointerIndex out of range

bug:

  1. 11-27 00:12:55.029: E/AndroidRuntime(22447): java.lang.IllegalArgumentException: pointerIndex out of range
  2. 11-27 00:12:55.029: E/AndroidRuntime(22447):      at android.view.MotionEvent.nativeGetAxisValue(Native Method)

原因

绘图的时候 多点触控 放大缩小 导致一场 , 我在viewpager 里面  通过手势绘制图片 放大缩小 造成了这个bug

我的 viewpager 解决方案: 

1 继承 view

2 重写 dispatchTouchEvent

3 抓住异常

  1. public class FixedViewPager extends ViewPager {
  2. public FixedViewPager(Context context) {
  3. super(context);
  4. }
  5. public FixedViewPager(Context context, AttributeSet attrs) {
  6. super(context, attrs);
  7. }
  8. @Override
  9. public boolean dispatchTouchEvent(MotionEvent ev) {
  10. try {
  11. return super .dispatchTouchEvent(ev);
  12. } catch (IllegalArgumentException ignored) {
  13. } catch (ArrayIndexOutOfBoundsException e) {
  14. }
  15. return false ;
  16. }
  17. }

网上有其它方法 如:

重写onInterceptTouchEvent 和onTouchEvent方法

try catch 该两个方法,形如下面:

  1. try{
  2. super.onInterceptTouchEvent(MotionEvent ev)
  3. } catch(ILLegalArgumentException ex) {
  4. }
  5. return false;
  6. try{
  7. super.onTouchEvent(MotionEvent ev)
  8. } catch(ILLegalArgumentException ex) {
  9. }
  10. return false;

参考: http://nanjingjiangbiao-t.iteye.com/blog/1794478

============= 1

在做多点触控放大缩小,操作自己所绘制的图形时发生这个异常, 如果是操作图片的放大缩小多点触控不会出现这个错误

这个bug是Android系统原因   所以第一种方式是:

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

注释掉

  1. if (!validatePointerIndex(env, pointerIndex, pointerCount))
  2. {return 0;}

改完后需重新编译整个系统,然后替换lib库,重新编译整个系统一般需要半个多小时,这个方法就比较麻烦了

 
第二种方法是:捕获IllegalArgumentException(非法参数异常)异常 即如

  1. private float spacing(MotionEvent event) {
  2. try {
  3. x = event.getX(0) - event.getX(1);
  4. y = event.getY(0) - event.getY(1);
  5. } catch (IllegalArgumentException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. }

第二种方法简单有效

bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法的更多相关文章

  1. Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)

    最近做View的多点触控时,每次第一次触控事件完美运行,第二次就直接崩了,错误信息如下: 01-03 00:05:44.220 4377-4410/system_process E/AndroidRu ...

  2. 图片缩放时java.lang.IllegalArgumentException: pointerIndex out of range解决方案

    版权声明:本文为博主原创文章,未经博主允许不得转载. 06-03 20:45:24.143: E/AndroidRuntime(1230): FATAL EXCEPTION: main06-03 20 ...

  3. 解决多指操作放大缩小 指针错误 java.lang.IllegalArgumentException: pointerIndex out of range

    /** Custom your own ViewPager to extends support ViewPager. java source: */ /** Created by azi on 20 ...

  4. JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法

    前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...

  5. Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决

    在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这 ...

  6. “java.lang.IllegalArgumentException: Failed to evaluate expression ‘ROLE_USER’”报错的解决

    这个问题出现在Spring Security的相关配置中,找到原来的这一行: <security:intercept-url pattern="/**" access=&qu ...

  7. MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method fai ...

  8. java.lang.IllegalArgumentException: object is not an instance of declaring class新发现

    文章目录 背景 报错 解决 引申 背景 因为要将方法缓存起来提高性能 报错 java.lang.IllegalArgumentException: object is not an instance ...

  9. Nginx配置Tomcat8反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.

    在配置Nginx的反向代理,访问反向代理的路径而出现了异常 java.lang.IllegalArgumentException: The character [_] is never valid i ...

随机推荐

  1. android开源项目---developer篇

    本文转载于:http://blog.csdn.net/likebamboo/article/details/19081209 主要介绍和Android开发工具和测试工具相关的开源项目. Buck fa ...

  2. Questions that are independent of programming language. These questions are typically more abstract than other categories.

    Questions that are independent of programming language.  These questions are typically more abstract ...

  3. 机器学习算法基础(Python和R语言实现)

    https://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/?spm=5176.100239.blo ...

  4. kvo-观察者-iOS

    #import <Foundation/Foundation.h> @interface Child : NSObject @property (nonatomic,assign) int ...

  5. Don’t Assume – Per Session Buffers

    MySQL has a number of global buffers, i.e. your SGA. There are also a number of per session/thread b ...

  6. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  7. bugFree与zentao

    架构:b/s 开发语言:php 服务器端:lamp 客户端:浏览器 相关包:lamp BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统.简单实用. ...

  8. 15条变量&方法命名的最佳实践【转】

    原文地址:15 Best Practices of Variable & Method Naming 不同的代码段采用不同的命名长度.通常来说,循环计数器(loop counters)采用1位 ...

  9. Android 广播大全 Intent Action 事件

    Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播 Intent.ACTION_BATTERY_CHANGED; //充电状态,或者电池的电量发生 ...

  10. firefox不支持background-position-x background-position-y,使用background-position:5px 5px;

    firefox不支持background-position-x background-position-y,使用background-position:5px 5px;