Android - 图片加载框架Android-Universal-Image-Loader

时间:2022-02-16 18:08:37

别人的博客

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();