PhotoViewAttacher清除imageView边界和缩放级别

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

我在ImageViewlow-quality设置图像,然后开始下载具有hight-quality的新图像,以取代low-quality图像。

如果用户放大low-quality图像 – high-quality图像取代了现有的图像,缩放级别清除:(

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

我试图从low-quality PhotoViewAttacher中获取图像Matrix ,并将其设置为high-quality image ,但不起作用 – 图像缩放级别和边界与以前不同。 high-quality图像取代了ImageViewlow-quality图像。

  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) { } }); 

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

Solutions Collecting From Web of "PhotoViewAttacher清除imageView边界和缩放级别"

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

  1. 确保ImageView的缩放types设置为ScaleType.MATRIX
  2. 使当前matrix无效,并根据新Drawable的尺寸重新计算它。

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