前言:imageloader作为一个开源的框架被广泛的使用,尤其对于新手而言,更是如此,本人在项目中每当用到imageloader的时候都是从网上百度然后复制粘贴,现在觉得那样没得意义,因此写此博客,当作以后发复习资料,同时稍微研究下imagelodaer内部用到的集合.
一,imageloader,ImageLoaderConfiguration和DisplayImageOptions之间的关系
imagelodaer是加载图片的对象,这个对象里面封装了一系列加载图方,如displayImage()方法,load()方法。imageloaderconfiguration 顾名思义是imageloader的配置对象,该对象中有一系列方法来设置下载下来的图片的大小,缓存的位置,缓存的大小等方法.DisplayImageOptions是加载图片时候设置属性,例如设置加载失败之后的图片,加载中的图片,该图片是否保存在缓存中,是否保存到文件中。缺少了DisplayImageOptions这个对象,图片是不会缓存起来的。
## 二.代码实现 ##
import java.io.File;
import com.example.imageloaderstudy.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.LruCache;
import android.widget.ImageView;
public class MainActivity extends Activity{
String url="http://g.hiphotos.baidu.com/image/pic/item/6c224f4a20a446230761b9b79c22720e0df3d7bf.jpg";
ImageView image;
File path;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
image=(ImageView) findViewById(R.id.image);
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
path=Environment.getExternalStorageDirectory();
}
File f=new File(path.getAbsoluteFile(),"ImageLoaderCache");
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480, 800) // maxwidth, max height,即保存的每个缓存文件的最大长宽
.memoryCache(new LruMemoryCache(3* 1024 * 1024))//程序内缓存
.memoryCacheSize(3* 1024 * 1024)
.discCacheSize(10*1024*1024)//缓存的文件大小
.discCache(new UnlimitedDiskCache(f))//自定义缓存的文件路径
.build();
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheInMemory(true)
.build();
ImageLoader.getInstance().init(configuration);
ImageLoader.getInstance().displayImage(url, image,options);
super.onCreate(savedInstanceState);
}
}
上面代码就是ImageLoader一般性用法,先实例化imageloaderconfiguration对象。然后通过imageloader.init(config),使imageloader设置配置信息,接着加载图片的时候,实例化DisplayImageOptions对象,调用包含DisplayImageOptions对象的加载方法,就能将图片缓存起来.
注意:要加入俩个权限:
uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”
uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”
有的时候需要把项目中的一些图片加到ImageLoader里面缓存起来这个时候只需要调用如下的方法,通过put或者save方法就可以将自己想要缓存的图片缓存起来.
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
ImageLoader.getInstance().getDiscCache();//获取文件存储的cache对象
ImageLoader.getInstance().getMemoryCache();//获取应用中的cache对象
}