PhotoViewAttacher清除imageView边界和缩放级别

时间:2015-05-22 15:53:18

标签: android imageview zoom

我正在使用PhotoView库来实现缩放Android ImageView。缩放工作正常。

我在low-quality中使用ImageView设置图片,然后开始使用hight-quality下载新图片,该图片将替换low-quality图片。

如果用户放大low-quality图片 - high-quality图片会替换现有图片并缩小缩放级别:(

如何在加载high-quality图像后保存缩放级别?

我已尝试从Matrix中的PhotoViewAttacher获取图片low-quality并将其设置为high-quality image,但它不起作用 - 图像缩放级别和边界与之前不同。 high-quality图片替换了low-quality中的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) {

        }
    });

修改:图片的尺寸不同。

1 个答案:

答案 0 :(得分:0)

查看PhotoViewAttacher.java的代码后,似乎调用update()会做两件事:

  1. 确保ImageView的比例尺类型设置为ScaleType.MATRIX
  2. 使当前矩阵无效并根据新Drawable的尺寸重新计算。
  3. 因此,假设您的第一张和第二张图片的尺寸完全相同,您可以跳过update()调用,该调用应保留当前的缩放和平移值。