MCDonald Blog

想写点东西

Picasso and Android-Universal-Image-Loader

picasso

Picasso http://square.github.io/picasso/ Square的开源项目之一

最大特点就是你只需要一句代码:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

缓存什么的设置基本可以忽略了

另外的一些诸如裁剪图片:

Picasso.with(context)  .load(url)  .resize(50, 50)  .centerCrop()  .into(imageView)

同样Picasso也支持Resources, assets, files, content providers的加载

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);

Picasso.with(context).load(new File(...)).into(imageView2);

Android-Universal-Image-Loader

Android-Universal-Image-Loader https://github.com/nostra13/Android-Universal-Image-Loader

特点

多线程加载图片

尽可能多的配置选项(线程池,加载器,解析器,内存/磁盘缓存,显示参数等等)

图片可以缓存在内存中,或者设备文件目录下,或者SD卡中

可以添加图片加载监听器

可以自定义显示每一张图片时都带不同参数

支持Widget

Android 2.0以上支持

使用

1、初始化imageloader,这个方法需要在application的create调用

public static void init(Context context) {
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    .threadPriority(Thread.NORM_PRIORITY - 2)
    .denyCacheImageMultipleSizesInMemory()
    .discCacheFileNameGenerator(new Md5FileNameGenerator())
    .tasksProcessingOrder(QueueProcessingType.LIFO)
    .writeDebugLogs() // Remove for release app
    .build();
    ImageLoader.getInstance().init(config);
}

2.配置显示的options

DisplayImageOptions displayOption = new DisplayImageOptions.Builder()
.bitmapConfig(Bitmap.Config.RGB_565)
.showImageOnLoading(R.drawable.avatar_placeholder)
.showImageForEmptyUri(R.drawable.avatar_placeholder)
.showImageOnFail(R.drawable.avatar_placeholder)
.cacheInMemory(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) 
.displayer(new BitmapDisplayer() {
    @Override
    public void display(Bitmap bitmap, ImageAware imageAware,
        LoadedFrom loadedFrom) {
        imageAware.setImageBitmap(bitmap);
    }
})
.build();

3.加载到view

ImageLoader.getInstance().displayImage(model.avatar, cell.avatarImageView, displayOption);

根据url获取已读的图片文件

File file1 = DiscCacheUtil.findInCache(card.avatar, imageLoader.getDiscCache());