使用ViewPager + Glide + PhotoView

时间:2018-12-27 08:16:57

标签: android android-glide android-photoview

我的用例是让ViewPager显示一系列PhotoView实例,其中分页浏览图像应保持缩放的最后状态。

PhotoView实例由PagerAdapter创建

public View instantiateItem(ViewGroup viewGroup, int position) {
    PhotoView photoView = new PhotoView(viewGroup.getContext());
    viewGroup.addView(photoView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    Glide.with(viewGroup.getContext())//
        .load(getImageUri(position))
        .into(photoView);
    return photoView;
}

我正在将“ OnMatrixChangedListener”附加到PhotoView并存储PhotoViewAttacher#mSuppMatrix。

我要解决的问题是找到适用于存储的mSuppMatrix的合适时机。

    无论ViewGroup处于何种状态,都会触发
  • ViewPager#onPageSelected。 PhotoView可能仍在绘制,或者Glide甚至仍在加载
  • Glide#RequestListener(onResourceReady)在Drawable准备就绪时触发,但显然在运行PhotoView#setImageDrawable之前
  • 即使在调用super.setImageDrawable之后重写PhotoView#setImageDrawable并应用mSuppMatrix还为时过早,因为稍后layout()调用会导致PhotoViewAttacher运行reset(),从而使mSuppMatrix无效

因此,给定一个目标“ mSuppMatrix”来保存缩放/平移信息,并使用ViewPager + PhotoView + Glide的组合,什么是应用mSuppMatrix的最佳侦听器/事件处理程序?

1 个答案:

答案 0 :(得分:0)

我还没有发现一个指示我要寻找状态的事件。相反,我使用的是以下组合:

  • 滑动RequestListener#onResourceReady()
  • View.OnLayoutChangeListener#onLayoutChange()

在Glide资源准备就绪后 之后,对onLayoutChange()的首次调用就是触发者。