android – PhotoViewAttacher清除imageView边界和缩放级别

我正在使用 PhotoView库来实现放大的Android ImageView.缩放效果很好.

我在ImageView中设置低质量的图像,然后开始以高质量下载新的图像,这将取代低质量的图像.

如果用户放大低质量的图像 – 高质量的图像将替换现有图像,缩放级别将清除:(

加载高质量图像后如何保存缩放级别?

我试图从PhotoViewAttacher中获取图像矩阵,并将其设置为高质量的图像,但它不起作用 – 图像缩放级别和边界与之前不一样.高质量的图像取代了ImageView中的低质量图像.

Matrix matrix;
    imageView.setimageBitmap(imageBitmap);
    ...

    PhotoViewAttacher  mAttacher = new PhotoViewAttacher(imageView);
    // save the matrix before any modifications
    matrix = mAttacher.getdisplayMatrix(); 
    mAttacher.setonMatrixchangelistener(new OnMatrixChangedListener() {
        @Override
        public void onMatrixChanged(RectF rect) {
            // update the matrix
            matrix = mAttacher.getdisplayMatrix(); 
        }
    });

    imageProvider.load(getActivity(),imageView,imageUrl,progressBarView,imageConfig,new ImageCallback() {
        @Override
        public void onSuccess(ImageView imageView) {
            // update image in ImageView
            // probably the problem is in this .update() call
            // but I don't get what's the exact problem
            mAttacher.update();
            // restore high-quality image matrix
            mAttacher.setdisplayMatrix(matrix);
        }

        @Override
        public void onError(ImageView imageView) {

        }
    });

编辑:图像具有不同的尺寸.

解决方法

看了 PhotoViewAttacher.java代码 – 似乎调用update()有两件事情:

>确保ImageView的缩放类型设置为ScaleType.MATRIX.
>使当前矩阵无效,并根据新的Drawable的尺寸重新计算它.

因此,假设您的第一张和第二张图像都具有完全相同的尺寸,您可以跳过update()调用,该调用应保留当前的缩放和平移值.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...