我正在使用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) {

        }
    });

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

最佳答案

看完PhotoViewAttacher.java的代码后-似乎调用update()可以完成两件事:

  • 确保ImageView的比例类型设置为ScaleType.MATRIX
  • 使当前矩阵无效,然后根据新Drawable的尺寸对其进行重新计算。

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

    关于android - PhotoViewAttacher清除imageView边界和缩放级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30401059/

    10-10 07:12