【问题标题】:Restore zoom/pan matrix on paging with ViewPager + Glide + PhotoView使用 ViewPager + Glide + PhotoView 恢复分页时的缩放/平移矩阵
【发布时间】:2018-12-27 08:16:57
【问题描述】:

我的用例是让 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 的最佳侦听器/事件处理程序是什么?

【问题讨论】:

    标签: android android-glide android-photoview


    【解决方案1】:

    我还没有找到一个事件表明我正在寻找的状态。相反,我使用了以下组合:

    • Glide RequestListener#onResourceReady()
    • View.OnLayoutChangeListener#onLayoutChange()

    这样在 Glide 资源准备就绪之后第一次调用 onLayoutChange() 就是触发事件。

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多