我是靠谱客的博主 甜美小懒猪,最近开发中收集的这篇文章主要介绍使用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 :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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部