如何在viewPager中的位置前刷新图像?

时间:2018-01-03 15:22:10

标签: android android-viewpager zoom

我使用viewPager具有PinchImageView的图像扩展,它提供缩放图像。 当我在viewPager中将位置滚动到其他位置时,缩放图像保持旧状态。

PinchImageView库链接:https://github.com/boycy815/PinchImageView

如何在viewPager中的位置前刷新图像?我认为使用destroyItem但未找到如何操作。

private class MyViewPagerAdapter extends PagerAdapter {

        PinchImageView photoView;

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {

            LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
            View view = inflater.inflate(R.layout.show_images, container, false);

            photoView = ViewUtil.findById(view, R.id.photoView);
            photoView.setViewPager(viewPager);

            Image image = allImages.get(position);
            if (image != null) {

              String path = image.getPath();

              if (hasPathControl(path)) {
               setImage();
               loadImage(path, photoView);
            }

            container.addView(view);

            return view;
        }

        @Override
        public int getCount() {
            return allImages.size();
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object obj) {
            return view == (obj);
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

            Mylog.i(TAG, " destroyItem position " + position);

            container.removeView((View) object);

        }

        private void loadImage(String path, ImageView imageView) {

            glideRequests.load(path)
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .dontTransform()
                    .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                    .transition(withCrossFade())
                    .into(imageView);
        }
    }

转到另一个位置:

必须是:Must be

现有:Actually

1 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是在ViewPager当前位置时更新/刷新视图。

来自PagerAdapter

source的java文档
  

PagerAdapter支持数据集更改。数据集更改必须在主线程上发生,并且必须以{@link #notifyDataSetChanged()}调用结束,类似于从{@link android.widget.BaseAdapter}派生的AdapterView适配器。数据集更改可能涉及添加,删除或更改位置的页面。如果适配器实现方法{@link #getItemPosition(Object)},ViewPager将保持当前页面处于活动状态。

OnPageChangeListener添加ViewPager。在onPageSelected上拨打notifyDataSetChanged上的PagerAdapter

这应该调用getItemPosition的{​​{1}}。然后将其添加到您的PagerAdapter

PagerAdapter

您应该在该位置获得更新的视图。