别人的博客
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
以上转自:xiaanming博客
==========================
以下自己开发常用:
说明
加载图片常用:displayImage()加载图片
① 使用displayImage()比使用loadImage()方便很多,也不需要添加ImageLoadingListener接口,直接将ImageView作为参数传递到displayImage()中就行了
②添加了一个图片加载中ImageVIew上面显示的图片,以及图片加载出现错误显示的图片,刚开始显示ic_stub图片,如果图片加载成功显示图片,加载产生错误显示ic_error
③ 根据控件的大小和imageScaleType来自动裁剪图片
④ OOM改善:减少线程池中线程的个数等
1、下面是我写的一个ViewPager的Adapter,写的比较分散:
package com.baofoo.mobile.wallet.home;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.baofoo.mobile.wallet.R;
import com.baofoo.mobile.wallet.common.manager.ClickFilter;
import com.baofoo.mobile.wallet.home.domain.Banners;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
/**
* 首页banners Adapter
* Created by zst on 2016/3/15.
*/
public class BannersAdapter extends PagerAdapter {
private Activity activity;
private List<Banners> bannersList;
private ImageLoader imageLoader;
private DisplayImageOptions options;
public BannersAdapter(Activity activity, List<Banners> bannersList) {
this.activity = activity;
this.bannersList = bannersList;
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.finance_advert_default)
.showImageForEmptyUri(R.drawable.finance_advert_default)
.showImageOnFail(R.drawable.finance_advert_default)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
}
@Override
public int getCount() {
return bannersList.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ImageView imageView = new ImageView(activity);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);// 基于控件大小填充图片
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClickFilter.clickFilterUrl(activity, bannersList.get(position).click);
}
});
imageLoader.displayImage(bannersList.get(position).img, imageView, options);
//String imgUrl = "https://ad.my.baofoo.com/data/mandaojr/upload-file/advertisingPic/20160315/5048f02607708c0e2986a76d747f7413.jpg";
//imageLoader.displayImage(imgUrl, imageView, options);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
2. 加载https://
官网的jar包不能加载https://,下载链接:https://github.com/nostra13/Android-Universal-Image-Loader
但是实际开发中需要加载https://的图片,所以有些大牛就重写了universal-image-loader,imageloader下载链接:http://download.csdn.net/detail/u012246458/9477808
3、加载图片进度监听
//加载图片
//ImageLoader配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.default_cover)//加载中的默认图片
.showImageForEmptyUri(R.drawable.default_cover)
.showImageOnFail(R.drawable.default_cover)
.imageScaleType(ImageScaleType.NONE)//不压缩加载
//.bitmapConfig(Bitmap.Config.ARGB_8888)//全色彩加载
.displayer(new FadeInBitmapDisplayer(100))// 图片加载好后渐入的动画时间
.cacheInMemory(true)//缓存到内存中
.cacheOnDisk(true)//缓存到内存卡中
.build();
ImageLoader.getInstance().displayImage(cartoon.getCartoon().getFileUrl(), tv_cartoon, options, new ImageLoadingListener() {//图片url, 图片布局, 配置, 图片监听, 图片加载进度
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
}
});
我设置了图片模糊的参数了,但是我加载的图片还是模糊,我就没办法了,搞了好久,所以我就用Google推荐的Glide来加载图片了:Glide加载。
4.清除缓存
如果图片连接不变,但是图片内容改变,图片会显示缓存,必须清除掉系统和硬盘缓存才能立即显示更改的图片
imageLoader.clearDiskCache();
imageLoader.clearMemoryCache();