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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在viewPager中的位置前刷新图像?相关的知识,希望对你有一定的参考价值。

我使用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

答案

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

来自sourcePagerAdapter的java文档

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

添加OnPageChangeListener到你的ViewPager。在onPageSelected上你的notifyDataSetChanged上的PagerAdapter

这应该叫getItemPositionPagerAdapter。然后将此添加到您的PagerAdapter

public int getItemPosition(Object object) {
    return POSITION_NONE;
}

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

以上是关于如何在viewPager中的位置前刷新图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 iTunes 连接元数据中的图像位置? [关闭]

如何记住分页刷新滚动位置

BAMS|神经网络气象应用的评估挖掘和解释

js如何在页面滚动到一定位置时触发事件?

如何使用 pysam.view() 将 SAM 转换为 BAM

提取bam/sam文件指定区域reads