我正在为我的应用程序使用UniversalImageLoader。我的ImageAdapte
r延伸PagerAdapter
。我需要currentImage作为Bitmap。通过回调methood 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
}
有没有办法获得正确的位图。
答案 0 :(得分:1)
如何获取当前视图 - https://stackoverflow.com/a/8638772/913762
然后:
View currentView = ...
ImageView currentImageView = (ImageView) currentView.findViewById(...);
BitmapDrawable bd = (BitmapDrawable) currentImageView.getDrawable();
Bitmap bmp = bd.getBitmap();
答案 1 :(得分:0)
当您对视图进行膨胀时出现问题:它与整个列表中使用的单个实例相同,因此当您的异步加载完成时,当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
。
希望得到这个帮助。