如何在 viewPager 的 before 位置刷新图像?
How to refresh image at before position in viewPager?
我使用的 viewPager 具有 PinchImageView 的图像扩展,可提供缩放图像。
当我在 viewPager 中滚动到其他位置时,缩放图像保持旧状态。
PinchImageView 库link:https://github.com/boycy815/PinchImageView
如何刷新viewPager中before位置的图片?我想过使用 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);
}
}
移动到另一个位置:
必须是:
现有:
实现此目的的一种方法是 update/refresh 当前位置时 ViewPager
中的视图。
来自 PagerAdapter
的 source 的 java 文档
PagerAdapter supports data set changes. Data set changes must occur on the main thread and must end with a call to {@link #notifyDataSetChanged()} similar to AdapterView adapters derived from {@link android.widget.BaseAdapter}. A data set change may involve pages being added, removed, or changing position. The ViewPager will keep the current page active provided the adapter implements the method {@link #getItemPosition(Object)}.
将 OnPageChangeListener
添加到您的 ViewPager
。在 onPageSelected
上调用 PagerAdapter
上的 notifyDataSetChanged
。
这应该调用PagerAdapter
的getItemPosition
。然后将其添加到您的 PagerAdapter
:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
您应该在该位置获得更新的视图。
我使用的 viewPager 具有 PinchImageView 的图像扩展,可提供缩放图像。 当我在 viewPager 中滚动到其他位置时,缩放图像保持旧状态。
PinchImageView 库link:https://github.com/boycy815/PinchImageView
如何刷新viewPager中before位置的图片?我想过使用 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);
}
}
移动到另一个位置:
必须是:
现有:
实现此目的的一种方法是 update/refresh 当前位置时 ViewPager
中的视图。
来自 PagerAdapter
PagerAdapter supports data set changes. Data set changes must occur on the main thread and must end with a call to {@link #notifyDataSetChanged()} similar to AdapterView adapters derived from {@link android.widget.BaseAdapter}. A data set change may involve pages being added, removed, or changing position. The ViewPager will keep the current page active provided the adapter implements the method {@link #getItemPosition(Object)}.
将 OnPageChangeListener
添加到您的 ViewPager
。在 onPageSelected
上调用 PagerAdapter
上的 notifyDataSetChanged
。
这应该调用PagerAdapter
的getItemPosition
。然后将其添加到您的 PagerAdapter
:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
您应该在该位置获得更新的视图。