我是靠谱客的博主 甜美小懒猪,最近开发中收集的这篇文章主要介绍使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range
- 我遇见的是在使用PhotoView的使用,在程序中动态的new一个ImageView出来,之后添加到ViewPager中。这时候运行程序如果使用手势对图片进行缩小,那么将会出来这个异常,在做多点触控放大缩小,操作自己所绘制的图形时发生这个异常,如果是操作图片的放大缩小多点触控不会出现这个错误
这个bug是Android系统原因
我的代码如下:
/**
* 进行网络数据的请求和加载
*/
private void loadData() {
//TODO 进行网络数据的加载
if (picList != null) {
for (int i = 0; i < picList.size(); i++) {
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
imageView.setLayoutParams(params);
EHttpUtil.bitmapUtils.display(imageView, picList.get(i));
PhotoViewAttacher mAttacher = new PhotoViewAttacher(imageView);
mAttacher.setScaleType(ImageView.ScaleType.CENTER_CROP);
mAttacher.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() {
@Override
public void onViewTap(View view, float x, float y) {
ActivityTransationAnimation.finishActivityFullToZero(MainDesignerProductShowActivity.this);
}
});
mAttacher.setOnScaleChangeListener(new PhotoViewAttacher.OnScaleChangeListener() {
@Override
public void onScaleChange(float scaleFactor, float focusX, float focusY) {
relativeLayout.setVisibility(View.GONE);
}
});
viewPagerList.add(imageView);
}
}
}
之后运行就出现了这个错,但是我查了很多的资料,重写
1. onTouch()
2. InterceptTouchEvent()
对里面的super方法进行try/catch但是没有什么效果,我的程序还是崩溃,所以我就接着在stackoverflower 中查找解决方法,最后的话终于解决了。
具体方案如下:
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Author: blueZhang
* Date: 2015/12/12 0012
* 163Email :bluezhang521@163.com
* QEmail:bluezhang521@foxmail.com
* QQ:2029379603
*/
public class MTouchViewPager extends ViewPager {
public MTouchViewPager(Context context) {
super(context);
}
public MTouchViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
private boolean mIsDisallowIntercept = false;
@Override
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
// keep the info about if the innerViews do
// requestDisallowInterceptTouchEvent
mIsDisallowIntercept = disallowIntercept;
super.requestDisallowInterceptTouchEvent(disallowIntercept);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// the incorrect array size will only happen in the multi-touch
// scenario.
if (ev.getPointerCount() > 1 && mIsDisallowIntercept) {
requestDisallowInterceptTouchEvent(false);
boolean handled = super.dispatchTouchEvent(ev);
requestDisallowInterceptTouchEvent(true);
return handled;
} else {
return super.dispatchTouchEvent(ev);
}
}
}
这样的话我的程序就能跑起来了,重写ViewPager 中的方法,这样就能直接吧ImageView放进ViewPager中进行缩放,缩放的过程中也能解决事件冲突的问题。
最后
以上就是甜美小懒猪为你收集整理的使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range的全部内容,希望文章能够帮你解决使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复