我正在使用UIL和此配置从FILE加载图像:
BitmapDisplayer displayer = new FadeInBitmapDisplayer(500) {
@Override
public Bitmap display(Bitmap bitmap, ImageView imageView,
LoadedFrom loadedFrom) {
if (loadedFrom != LoadedFrom.MEMORY_CACHE) {
return super.display(bitmap, imageView, loadedFrom);
} else {
imageView.setImageBitmap(bitmap);
return bitmap;
}
}
};
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.thumbnail_no_image)
.showImageOnFail(R.drawable.thumbnail_no_image)
.displayer(displayer).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
context).defaultDisplayImageOptions(options)
.memoryCacheSize(2 * 1024 * 1024).build();
sLoader.init(config);
我需要在GridView
中实施选择,所以在我考虑选择任何项目后,我会调用notifyDataSetChanged
以使我的selectionOverlay可见。在此调用之后,所有图像都开始重新加载,这导致GridView
闪烁。我怎么能避免这个?
答案 0 :(得分:3)
我认为你不应该在这种情况下调用 notifyDataSetChanged 。
在适配器上调用 notifyDataSetChanged 告诉ListView / GridView您的数据已更改,您应该刷新自己。因此,当您调用此方法时,它会自行重新加载并调用适配器的 getView()。这就是UIL开始加载图像的原因。 (实际上所有行重新加载的视图)因为这是用getView()编写的。
要访问行视图及其数据,您可以使用GridView的 setOnItemClickListener 。您将在此方法中获得足够的参数,因此您可以相应地使用它。
我希望这会有所帮助。 感谢
答案 1 :(得分:0)
这可能对您的要求有用。 https://github.com/koush/UrlImageViewHelper
使用以下代码显示来自网址的图片。
UrlImageViewHelper.setUrlDrawable(holder.imageView2, url,
R.drawable.default, new UrlImageViewCallback() {
@Override
public void onLoaded(ImageView imageView,
Bitmap b, String url,
boolean loadedFromCache) {
// only show the animation
// if it was loaded from
// network or disk...
if (!loadedFromCache) {
if (b != null)
holder.imageView2.setImageBitmap(b);
// ScaleAnimation scale = new ScaleAnimation(0,
// 1,
// 0, 1, ScaleAnimation.RELATIVE_TO_SELF,
// .5f, ScaleAnimation.RELATIVE_TO_SELF,
// .5f);
// scale.setDuration(1000);
// imageView.startAnimation(scale);
} else {
if (b != null)
holder.imageView2.setImageBitmap(b);
}
}
});