最近做View的多点触控时,每次第一次触控事件完美运行,第二次就直接崩了,错误信息如下:

   

01-03 00:05:44.220 4377-4410/system_process E/AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: android.ui

java.lang.IllegalArgumentException: pointerIndex out of range

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

at android.view.MotionEvent.getX(MotionEvent.java:2072)

at com.android.server.policy.EnableAccessibilityController.onTouchEvent(EnableAccessibilityController.java:193)

at com.android.server.policy.GlobalActions.onTouch(GlobalActions.java:1077)

at android.view.View.dispatchTouchEvent(View.java:9404)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2660)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2304)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)

at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2447)

at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1766)

at android.app.Dialog.dispatchTouchEvent(Dialog.java:797)

at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2408)

at android.view.View.dispatchPointerEvent(View.java:9646)

at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4738)

at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4596)

at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4101)

at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4154)

at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4120)

at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4266)

at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4128)

at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4323)

at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4101)

at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4154)

at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4120)

at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4128)

at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4101)

at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6555)

at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6529)

at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6472)

at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6727)

at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)

at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)

at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)

at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6686)

at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6753)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894)

at android.view.Choreographer.doCallbacks(Choreographer.java:696)

at android.view.Choreographer.doFrame(Choreographer.java:625)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880)

at android.os.Handler.handleCallback(Handler.java:815)

at android.os.Handler.dispatchMessage(Handler.java:104)

at android.os.Looper

解决方案:

这个bug是Android系统原因   所以第一种方式是:
 
修改frameworks\base\core\jni\android_view_MotionEvent.cpp的android_view_MotionEvent_nativeGetAxisValue方法
 
注释掉
[java]
if (!validatePointerIndex(env, pointerIndex, pointerCount)) {return 0;} 
改完后需重新编译整个系统,然后替换lib库,重新编译整个系统,这个方法就比较麻烦了
 
第二种方法是:捕获IllegalArgumentException(非法参数异常)异常 即如
[java] 
private float spacing(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(); 
    } 
第二种方法简单有效。

 

Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)的更多相关文章

  1. bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法

    ========== 4     如何解决java.lang.IllegalArgumentException: pointerIndex out of range? 今天遇到一个bug:java.l ...

  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. Android多点触控技术

    1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouc ...

  5. [yueqian_scut]Android多点触控技术和应用框架

    Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...

  6. Android 多点触控与简单手势(一)

    现在一般的Android手机都会使用电容触摸屏最少可以支持两点触摸,多的可能是七八个,所以基本上都会支持多点触控, android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求. And ...

  7. Android多点触控技术实战,自由地对图片进行缩放和移动

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果, ...

  8. 关于android多点触控

    最近项目需要一个多点触控缩放的功能.然后上网查了下资料 总结一下: 首先android sdk版本很重要,比如你在AndroidManifest.xml中指定android:minSdkVersion ...

  9. Android多点触控(图片的缩放Demo)

    本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理.须要实现OnTouchListener接口,重写当中的onTouch方法. 实现效果图:       源码: 布局文 ...

随机推荐

  1. bzoj3413

    SAM好题,显然我们不能与每个后缀都去算LCP 考虑对询问串每一位算贡献,先构建出逆序构建自动机,这样我们得到了原串的后缀树(parent树) 根据parent树的定义,一个节点对应字符串出现的位置对 ...

  2. jquery获取div距离顶部的距离

    获取元素到页面顶部距离的语句为: 1.jquery写法:$(“#divID”).offset().top //推荐 $("#vertical").position().top 2. ...

  3. sqlserver 导入/导出Excel

    --从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句: /*=========================================================== ...

  4. python - wsgi协议

    wsgi - python web server gateway interface 出现的目的是,为了在 python框架开发的时候,更具有通用性.只要符合 wsgi标准,就可以自由选择服务器(ng ...

  5. spring3.0.5的aop使用

    spring3.0.5开始支持jpa2.0了,但是最近笔者在使用他的的时候发现了3.0.5的包与2.5.5相比,有所精简.其他外部的包,我们需要自己下载. AOP必须的spring包 org.spri ...

  6. mbr grub的区别

    mbr是磁盘的物理扇区,不是程序名: 因为BIOS很小,功能有限,为了完成加载操作系统的功能,就产生了mbr: bios检测到一个硬盘后,将硬盘的0柱面.0磁头.1扇区的内容经过简单判断后, 至内存中 ...

  7. 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

    题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

  8. Oracle表操作 (未完待续)

    1. Oracle 中将一个表中数据导入到另外一个表的方法 insert into scd_data_201007 select * from analog_data_201007 ; 2. 纵表转换 ...

  9. NumberSeekBar 可任意拖动和自动

    package com.example.numberseekbar; import android.content.Context; import android.content.res.Resour ...

  10. 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

    以数组的方法: public static void main(String[] args) {        final int n = 10;          final int k = 1;  ...