使用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中进行缩放,缩放的过程中也能解决事件冲突的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值