据我所知,universal-image-loader提供了两种显示图像的方法。 imageLoader.loadImage和imageLoader.displayImage。但是这两个方法必须绑定到要显示的UI元素。我可以只在线程中下载缓存文件(以备将来显示)。我现在不需要显示这些图像。
答案 0 :(得分:12)
您仍然可以使用UIL
。根据下面使用的displayOptions
,图像将被缓存。
请参阅此处 - https://github.com/nostra13/Android-Universal-Image-Loader
//加载图像,将其解码为Bitmap并将Bitmap返回到回调
imageLoader.loadImage(imageUri, displayOptions, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
答案 1 :(得分:6)
我可以在线程中下载缓存文件(以备将来显示)。 我现在不需要显示这些图像。
您可以使用Executor下载文件或创建线程。您不需要使用通用图像加载器。
http://developer.android.com/reference/java/util/concurrent/Executor.html
您也可以使用DownloadManager并将文件保存在SD卡中。您可以检索相同内容以供日后使用。
要缓存位图,您可以将图像写入SD卡中的文件夹。
缓存位图
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
您将位图缓存在内存或磁盘中。该链接包含有关该主题的详细信息。
你基本上使用UIL ofr在listview或grdiview中显示图像。要在listview或gridview中使用UIL,您可以执行以下操作。
https://github.com/nostra13/Android-Universal-Image-Loader。它基于Lazy List(基于相同的原理)。但它有很多其他配置。如果下载失败,您可以显示错误图像。可以显示带圆角的图像。可以缓存在光盘或内存上。可压缩图像。
在自定义适配器构造函数
中 File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");
// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
// You can pass your own memory cache implementation
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())
.enableLogging()
.build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();
在你的getView()
中 ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options
您可以配置其他选项以满足您的需求。
除了延迟加载/通用图像加载器,您还可以查看支架以实现平滑滚动和性能。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html
答案 2 :(得分:2)
Theres loadImage(String uri, ImageLoadingListener listener)
,我认为如果您不需要,可以为侦听器调用null。
答案 3 :(得分:0)
添加@Robin Srivastava的答案:
您还必须实例化ImageLoader
上下文,例如:
imageLoader = ImageLoader.getInstance();
之前可以使用loadImage
方法。 displayOptions
参数也是可选的,因此您可以在需要时将其排除。
答案 4 :(得分:0)
使用UIL,我们可以在图像完全加载后保存图像。
在加载完成后使用ImageLoading侦听器,侦听器有一个名为onLoadingComplete()
的方法,我们可以获取图像的位图,并可以使用以下方法saveImage()
来存储该位图
Bitmap imageBitmap=null;
ImageLoader.getInstance().displayImage(String.valueOf(mediaPath), imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case UNKNOWN:
message = "Unknown error";
break;
case IO_ERROR:
message = "I/O error";
break;
case NETWORK_DENIED:
message = "Network Denied";
break;
case OUT_OF_MEMORY:
message = "Out of memory";
break;
case DECODING_ERROR:
message = "decoding error";
break;
}
Toast.makeText(FullScreenActivity.this, message, Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
//we can get imageBitmap here when loading is completed
imageBitmap=loadedImage;
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
使用此方法将文件保存在本地存储中
public void saveImage(){
if(imageBitmap!=null){
File dir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + “/Images/");
if (!dir.exists()) {
if (dir.mkdirs()) {
Log.i(TAG, "Directory created");
}
}
//put your image file name here
File mypath=new File(dir,"yourImageName.png");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
// Use the compress method on the BitMap object to write image to the OutputStream
if(imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)){
showToast("Successfully downloaded");
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Toast toast=null;
private void showToast(String message) {
if (toast != null) toast.cancel();
toast = Toast.makeText(FullScreenActivity.this, message, Toast.LENGTH_SHORT);
toast.show();
}