Android PagerAdapter :: 将当前项目放入位图中
Posted
技术标签:
【中文标题】Android PagerAdapter :: 将当前项目放入位图中【英文标题】:Android PagerAdapter :: Get Current Item into bitmap 【发布时间】:2012-12-29 07:21:14 【问题描述】:我正在为我的应用程序使用 UniversalImageLoader。我的ImageAdapte
r 扩展了PagerAdapter
。我需要 currentImage 作为位图。通过回调方法 public void onLoadingComplete(Bitmap loadedImage)
我得到位图。但这不是当前显示的位图图像。它是下一个图像或上一个图像(取决于交换)。完整代码如下:
private class ImagePagerAdapter extends PagerAdapter
private String[] images;
private LayoutInflater inflater;
ImagePagerAdapter(String[] images)
this.images = images;
inflater = getLayoutInflater();
@Override
public void destroyItem(View container, int position, Object object)
((ViewPager) container).removeView((View) object);
@Override
public void finishUpdate(View container)
@Override
public int getCount()
return images.length;
@Override
public Object instantiateItem(View view, int position)
if (view != null)
final View imageLayout = inflater.inflate(
R.layout.item_pager_image, null);
final ImageView imageView = (ImageView) imageLayout
.findViewById(R.id.image_item_pager);
imageLoader.displayImage(images[position], imageView, options,
new ImageLoadingListener()
@Override
public void onLoadingStarted()
@Override
public void onLoadingFailed(FailReason failReason)
//On Loading Failed Logic
@Override
public void onLoadingComplete(Bitmap loadedImage)
bitmap = loadedImage;
imgViewSetAsWp.setImageBitmap(bitmap);
@Override
public void onLoadingCancelled()
// Do nothing
);
((ViewPager) view).addView(imageLayout, 0);
return imageLayout;
else
return view;
@Override
//Other override methood of ImagePager
有什么方法可以得到正确的位图。
【问题讨论】:
【参考方案1】:如何获取当前视图 - https://***.com/a/8638772/913762
然后:
View currentView = ...
ImageView currentImageView = (ImageView) currentView.findViewById(...);
BitmapDrawable bd = (BitmapDrawable) currentImageView.getDrawable();
Bitmap bmp = bd.getBitmap();
【讨论】:
【参考方案2】:当你膨胀视图时问题就来了:它是整个列表中使用的同一个实例,所以当你的异步加载完成时,当 viewpager 尝试使用相同的 imageView 绘制不同的项目时,图像会发生变化。这是我的修复方法。
1)创建一个名为 ViewHolder 的类
class ViewHolder
public ImageView image;
2) 完成充气后,创建新的 ViewHolder 对象并绑定它。
ViewHolder holder = new ViewHolder();
holder.image = (ImageView) imageLayout.findViewById(R.id.image_item_pager);
之后,您可以像平常一样使用holder.image
ImageView
。
希望对您有所帮助。
【讨论】:
感谢重播。我的 ImagePager 工作正常。在 imageView 上加载了确切的图像。问题是获取确切的位图。@Override public void onLoadingComplete(Bitmap loadedImage) bitmap = loadedImage;
此函数在设置正确图像后加载下一张或上一张图像。我需要当前的 bimap 图像。
换个方法怎么样。 imageLoader.displayImage(images[position], imageView)
最新版本的UniversalImageLoader
库有displayImage
方法,只需要image link
和imageview
作为参数。我已经用了一段时间了。
我正在搜索当前在位图中显示的图像。 @nostra 的解决方案奏效了。谢谢:)以上是关于Android PagerAdapter :: 将当前项目放入位图中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Android 的 PagerAdapter 类自动显示图像?
Android setVisibility无法在PagerAdapter中运行
Android:PagerAdapter 删除最后一个视图,因此您无法向左滑动
Android ViewPager/PagerAdapter ImageView OutOfMemoryError