使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range

使用PohtoView出现java.lang.IllegalArgumentException: pointerIndex out of range

  1. 我遇见的是在使用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 :[email protected] * QEmail:[email protected] * 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中进行缩放,缩放的过程中也能解决事件冲突的问题。

你可能感兴趣的:(viewpager,异常)