Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 用于PhotoView的缩放监听器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_0@@H_197_0@我正在使用Chris Bane的 PhotoView在ViewPager中显示ImageViews.我想在用户放大图像时禁用ViewPager的滚动.我已经找到了这个 Hacky ViewPager,可以通过调用toggleLock()来启用/禁用滚动.
public class HackyViewPager extends ViewPager {

    private Boolean isLocked;

    public HackyViewPager(Context context) {
        super(context);
        isLocked = false;
    }

    public HackyViewPager(Context context,AttributeSet attrs) {
        super(context,attrs);
        isLocked = false;
    }

    @Override
    public Boolean onInterceptTouchEvent(MotionEvent ev) {
        if (!isLocked) {
            try {
                return super.onInterceptTouchEvent(ev);
            }
            catch (IllegalArgumentexception E) {
                e.printStackTrace();
                return false;
            }
        }
        return false;
    }

    @Override
    public Boolean onTouchEvent(MotionEvent event) {
        return !isLocked && super.onTouchEvent(event);
    }

    public void toggleLock() {
        isLocked = !isLocked;
    }

    public void setLocked(Boolean isLocked) {
        this.isLocked = isLocked;
    }

    public Boolean isLocked() {
        return isLocked;
    }

}

所以我的问题是,我不确定我必须在哪个位置调用toogleLock().我想我必须实现一个监听器,但我不确定哪一个是最好的.在此先感谢帮助我!

编辑:我自己想出来了!

photoview.setOnMatrixchangelistener(new PhotoViewAttacher.onMatrixChangedListener() {
            @Override
            public void onMatrixChanged(RectF rectF) {
                if (photoview.getScale() > 1) {
                    sPager.setLocked(true);
                } else {
                    sPager.setLocked(false);
                }
            }
        });

解决方法

对我来说,photoview.getScale()== 1总是和我一起使用缩放.

setOnScalechangelistener中的scaleFactor只是某个时间的刻度,与前一个值无关.我们需要计算累积scaleFactor.

private float cumulScaleFactor = 1;

photoViewAttacher.setOnScalechangelistener(new PhotoViewAttacher.onScalechangelistener() {
 @Override
 public void onScaleChange(final float scaleFactor,final float focusX,final float focusY) {
     cumulScaleFactor = cumulScaleFactor * scaleFactor;

     sPager.setLocked(isValueApproximate(1.0f,cumulScaleFactor));
 }
});


private Boolean isValueApproximate(final float expectedValue,final float value) {
    final float errorMargin = 0.01f;
    return Math.abs(expectedValue - value) < errorMargin;
}

大佬总结

以上是大佬教程为你收集整理的android – 用于PhotoView的缩放监听器全部内容,希望文章能够帮你解决android – 用于PhotoView的缩放监听器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。