图片缩放时java.lang.IllegalArgumentException: pointerIndex out of range解决方案
版权声明:本文为博主原创文章,未经博主允许不得转载。
06-03 20:45:24.143: E/AndroidRuntime(1230): FATAL EXCEPTION: main
06-03 20:45:24.143: E/AndroidRuntime(1230): java.lang.IllegalArgumentException: pointerIndex out of range
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.MotionEvent.getX(MotionEvent.java:1981)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:91)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:219)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1768)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1935)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2289)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2032)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2289)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2032)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2289)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2032)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2289)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2032)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2289)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2032)
06-03 20:45:24.143: E/AndroidRuntime(1230): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2020)
06-03 20:45:24.143: E/AndroidRuntime(1230): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1470)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.app.Activity.dispatchTouchEvent(Activity.java:2471)
06-03 20:45:24.143: E/AndroidRuntime(1230): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1968)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.View.dispatchPointerEvent(View.java:7396)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3251)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3196)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4238)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4217)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4309)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:163)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4288)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4328)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.Choreographer.doFrame(Choreographer.java:523)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.os.Handler.handleCallback(Handler.java:615)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.os.Handler.dispatchMessage(Handler.java:92)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.os.Looper.loop(Looper.java:137)
06-03 20:45:24.143: E/AndroidRuntime(1230): at android.app.ActivityThread.main(ActivityThread.java:4803)
06-03 20:45:24.143: E/AndroidRuntime(1230): at java.lang.reflect.Method.invokeNative(Native Method)
06-03 20:45:24.143: E/AndroidRuntime(1230): at java.lang.reflect.Method.invoke(Method.java:511)
06-03 20:45:24.143: E/AndroidRuntime(1230): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
06-03 20:45:24.143: E/AndroidRuntime(1230): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
06-03 20:45:24.143: E/AndroidRuntime(1230): at dalvik.system.NativeStart.main(Native Method)
06-03 20:45:26.773: E/Trace(1281): error opening trace file: No such file or directory (2)
一个问题,两天时间,搜破了百度没有啥成效。只有这点东西,到处转的,没有说明怎么用。帮助不大!百度上仅有的点内容如下:
=========================================================================================================
在做多点触控放大缩小,操作自己所绘制的图形时发生这个异常,如果是操作图片的放大缩小多点触控不会出现这个错误
这个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();
}
第二种方法简单有效
========================================================================================================
这种方法我不会用,不知道该用在哪儿。
接着用谷歌搜索,顺着终于找到了解决方案。经历了以下网站:
http://stackoverflow.com/questions/6919292/pointerindex-out-of-range-android-multitouch
https://code.google.com/p/android/issues/detail?id=18990
https://github.com/chrisbanes/PhotoView/issues/31
上面是搜索的过程,现在把精华内容拣出来:思路是自定义ViewPager,重写onTouchEvent 和onInterceptTouchEvent。具体见下:
It's the android ViewPager's bug
stackoverflow's report: http://stackoverflow.com/questions/6919292/pointerindex-out-of-range-android-multitouch
android's report: http://code.google.com/p/android/issues/detail?id=18990
My simple's method to fix this bug:
You can extends the ViewPager class, your own ViewPager should override the onTouchEvent and the onInterceptTouchEvent methods, and try-catch the IllegalArgumentException exception. Then use your own ViewPager class in layout or others you want.
Examples:
- /** Custom your own ViewPager to extends support ViewPager. java source: */
- /** Created by azi on 2013-6-21. */
- package com.chaokuadi.android.support.view;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- public class ViewPagerFixed extends android.support.v4.view.ViewPager {
- public ViewPagerFixed(Context context) {
- super(context);
- }
- public ViewPagerFixed(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- try {
- return super.onTouchEvent(ev);
- } catch (IllegalArgumentException ex) {
- ex.printStackTrace();
- }
- return false;
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- try {
- return super.onInterceptTouchEvent(ev);
- } catch (IllegalArgumentException ex) {
- ex.printStackTrace();
- }
- return false;
- }
- }
- /** ViewPager layout */
- <?xml version="1.0" encoding="utf-8"?>
- <com.chaokuaidi.android.support.view.ViewPagerFixed xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/pager"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" />
图片缩放时java.lang.IllegalArgumentException: pointerIndex out of range解决方案的更多相关文章
- bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
========== 4 如何解决java.lang.IllegalArgumentException: pointerIndex out of range? 今天遇到一个bug:java.l ...
- Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)
最近做View的多点触控时,每次第一次触控事件完美运行,第二次就直接崩了,错误信息如下: 01-03 00:05:44.220 4377-4410/system_process E/AndroidRu ...
- 解决多指操作放大缩小 指针错误 java.lang.IllegalArgumentException: pointerIndex out of range
/** Custom your own ViewPager to extends support ViewPager. java source: */ /** Created by azi on 20 ...
- springmvc与mybatis整合时 java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 异常
今天在整合springmvc与mybatis时,启动服务器遇到这样一个问题, by: java.lang.IllegalArgumentException: Property 'sqlSessionF ...
- 安卓java.lang.IllegalArgumentException: The observer is null.解决方案
刚刚在调试自己的APP项目的时候报错java.lang.IllegalArgumentException: The observer is null.,而之前是可以运行通过,所以百思不得其解,后来在网 ...
- Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence
在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...
- 用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException
用eclipse部署tomcat时出现异常:java.lang.IllegalArgumentException: Invalid 'log4jConfigLocation' parameter: c ...
- 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 ...
- SonarQube执行代码分析时,报错ERROR: Unable to create symbol table for : /**/*.java java.lang.IllegalArgumentException: Unsupported class file major version 55
若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11686633.html 起因: 最近正在尝试SonarQube的简单使用,但是当 ...
随机推荐
- webview中java与js交互
WebView提供了在Android应用中展示网页的强大功能.也是目前Hybird app的大力发展的基础.作为Android系统的一个非常重要的组件,它提供两方面的强大的能力:对HTML的解析,布局 ...
- 华为在线OJ_找7
描述 输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37...70,71,72,73...)的个数 知识点 循环 运行时间限制 0M 内存限制 0 输入 一个正整数N.(N不大于 ...
- Flex布局新旧混合写法详解(兼容微信)
原文链接:https://www.usblog.cc/blog/post/justzhl/Flex布局新旧混合写法详解(兼容微信) flex是个非常好用的属性,如果说有什么可以完全代替 float 和 ...
- TLF相关资料
1\(转)http://blog.csdn.net/hu36978/article/details/5796165 TFL 一般先创建TextFlow 通过控制flowComposer属性来控制文本 ...
- Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
1218 疫情控制 2012年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description H 国有 n 个城市,这 ...
- 2016ACM竞赛训练暑期课期末考试 a题
描述 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合. 输入 第一行是一个正整数n(n<=600).第二行是n个不同的整数,相邻两个整数之间用单个空格隔开. ...
- 九度OJ 1528 最长回文子串 -- Manacher算法
题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...
- AbstractExecutorService (未完成)
AbstractExecutorService是一个实现了ExecutorService的抽象类.主要实现了ExecutorService的invoke方法.
- js实现瀑布流的一种简单方法实例分享
现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它, ...
- 常用PHP运行环境一键安装包
PHP的程序很火,像博客:Wordpress.论坛:Discuz!.SNS:UCenter Home.CMS:DedeCMS等等都是比较流行的PHP程序,大家都在使用PHP类的程序,但对于很多初学者来 ...