Восстановите матрицу масштабирования / панорамирования при просмотре страниц с помощью ViewPager + Glide + PhotoView - PullRequest
0 голосов
/ 27 декабря 2018

Мой вариант использования - использовать 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.

  • ViewPager # onPageSelected срабатывает независимо от состояния ViewGroup, т.е.PhotoView может все еще рисовать, или Glide может даже загружаться
  • Glide # RequestListener (onResourceReady) срабатывает, когда Drawable готов, но, очевидно, ДО запуска PhotoView # setImageDrawable
  • Даже переопределяя PhotoView #setImageDrawable и применение mSuppMatrix после вызова super.setImageDrawable слишком рано, так как позднее вызов layout () приводит к запуску resetView () PhotoViewAttacher, что делает недействительным mSuppMatrix

Таким образом, с учетом цели "mSuppMatrix"удерживая информацию о масштабировании / панорамировании и используя комбинацию ViewPager + PhotoView + Glide, какой лучший обработчик слушателя / события применяет mSuppMatrix?

1 Ответ

0 голосов
/ 30 декабря 2018

Я не нашел ни одного события, указывающего состояние, которое я ищу.Вместо этого я использую комбинацию:

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

, так чтопервый вызов onLayoutChange () после ресурс Glide готов к запуску.

...