Universal Image Loader - 在多个视图中使用相同的图像
Universal Image Loader - Use same image in multiple views
我正在使用 Universal Image Loader 从后端加载图像以在列表中显示用户图像;但是,如果该图标出现多次,则 Universal Image Loader 不会填满所有视图。
- [用户图片 1] - 无图片
- [用户图片 1] - 无图片
- [用户图片 2] - 很好
- [用户图片 2] - 无图片
- [用户图片 3] - 很好
- [用户图片 1] - 很好
然后在另一个屏幕上:
- [用户图片 1] - 很好
- [用户图片 1] - 无图片
我正在使用 cacheInMemory 和 cacheOnDisk,它们似乎有所改进。和以前一样,它只在其中一个视图中显示它,而不是在大多数视图中显示它,但我需要所有这些视图都能正常工作。
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory( true )
.cacheOnDisk( true )
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this )
.threadPoolSize( 3 )
.defaultDisplayImageOptions( defaultOptions )
.build();
ImageLoader.getInstance().init( config );
我没有为此任务使用 ListView,我使用的是 ScrollView 并使用自定义布局对其进行扩充。
private View createSmallActivity( LayoutInflater inflater, final Event activity ) {
final View view;
view = inflater.inflate( R.layout.activity_posted_small, null );
...
// The owner's image.
if( activity.ownerImageUrl != null ) {
Loader.loadImage( getActivity(),
activity.ownerImageUrl,
R.drawable.postedactivitysmall_imageprofileempty,
( ImageView ) view.findViewById( R.id.profileImage ) );
}
return view;
}
// Loader.loadImage
// Setting the targetSize, and masking the image with a resource.
public static void loadImage( Context context, String url, int resource, ImageView view ) {
Drawable d = context.getResources().getDrawable( resource );
int h = d.getIntrinsicHeight();
int w = d.getIntrinsicWidth();
ImageSize targetSize = new ImageSize( w, h );
ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
}
关于如何改进 Universal Image Loader 以确保正确填写所有视图有什么想法吗?
感谢您的帮助!
这是因为 Universal Image Loader 取消了之前使用相同 url(用作 id)的请求。要防止这种行为,请替换
ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
来自
ImageLoader.getInstance().displayImage(url,
new NonViewAware(new ImageSize(w, h), ViewScaleType.CROP),
new MaskImageLoader(context, view, resource));
我推荐你使用ListView。也许您应该全局声明 ImageLoader。然后使用它。
ImageLoader imageLoader = ImageLoader.getInstance();
...
imageLoader.displayImage(imageUri, imageView);
我正在使用 Universal Image Loader 从后端加载图像以在列表中显示用户图像;但是,如果该图标出现多次,则 Universal Image Loader 不会填满所有视图。
- [用户图片 1] - 无图片
- [用户图片 1] - 无图片
- [用户图片 2] - 很好
- [用户图片 2] - 无图片
- [用户图片 3] - 很好
- [用户图片 1] - 很好
然后在另一个屏幕上:
- [用户图片 1] - 很好
- [用户图片 1] - 无图片
我正在使用 cacheInMemory 和 cacheOnDisk,它们似乎有所改进。和以前一样,它只在其中一个视图中显示它,而不是在大多数视图中显示它,但我需要所有这些视图都能正常工作。
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory( true )
.cacheOnDisk( true )
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this )
.threadPoolSize( 3 )
.defaultDisplayImageOptions( defaultOptions )
.build();
ImageLoader.getInstance().init( config );
我没有为此任务使用 ListView,我使用的是 ScrollView 并使用自定义布局对其进行扩充。
private View createSmallActivity( LayoutInflater inflater, final Event activity ) {
final View view;
view = inflater.inflate( R.layout.activity_posted_small, null );
...
// The owner's image.
if( activity.ownerImageUrl != null ) {
Loader.loadImage( getActivity(),
activity.ownerImageUrl,
R.drawable.postedactivitysmall_imageprofileempty,
( ImageView ) view.findViewById( R.id.profileImage ) );
}
return view;
}
// Loader.loadImage
// Setting the targetSize, and masking the image with a resource.
public static void loadImage( Context context, String url, int resource, ImageView view ) {
Drawable d = context.getResources().getDrawable( resource );
int h = d.getIntrinsicHeight();
int w = d.getIntrinsicWidth();
ImageSize targetSize = new ImageSize( w, h );
ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
}
关于如何改进 Universal Image Loader 以确保正确填写所有视图有什么想法吗?
感谢您的帮助!
这是因为 Universal Image Loader 取消了之前使用相同 url(用作 id)的请求。要防止这种行为,请替换
ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
来自
ImageLoader.getInstance().displayImage(url,
new NonViewAware(new ImageSize(w, h), ViewScaleType.CROP),
new MaskImageLoader(context, view, resource));
我推荐你使用ListView。也许您应该全局声明 ImageLoader。然后使用它。
ImageLoader imageLoader = ImageLoader.getInstance();
...
imageLoader.displayImage(imageUri, imageView);