一、ImageLoader的下载
GitHub:https://github.com/nostra13/Android-Universal-Image-Loader
二、使用步骤
- 需要在活动的oncreate()中初始化ImageLoader
private void initImageLoader(Context context) {
// 初始化参数
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2) // 线程优先级
.denyCacheImageMultipleSizesInMemory() // 当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片
.discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的URI名称用MD5
.tasksProcessingOrder(QueueProcessingType.LIFO) // 设置图片下载和显示的工作队列排序
.writeDebugLogs() // 打印debug log
.build();
// 全局初始化此配置
ImageLoader.getInstance().init(config);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxx);
initImageLoader(this);
}
- 在适配器中,以一个足迹Demo为例
/**
* Created by Orimol on 2017/12/22.
* By Orimol
*/
public class FootMarkAdapter extends BaseAdapter {
// 固定写法,用于接收activity传递的值
private List<Footmark> footmarks;
private Context context;
// END
// Demo About ListView add photo
private ImageLoader imageLoader;
private DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.imagexiangce) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.imagexiangce) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.imagexiangce) // 设置图片加载或解码过程中发生错误显示的图片
.cacheInMemory(true) // 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中
//.displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
.build(); // 创建配置过得DisplayImageOption对象;
// END
public FootMarkAdapter(Context context,List<Footmark> footmarks){
this.context = context;
this.footmarks = footmarks;
imageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return footmarks.size();
}
@Override
public Object getItem(int position) {
return footmarks.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
convertView = View.inflate(context, R.layout.footmark_item, null);
holder = new ViewHolder();
holder.footmark_item_image = (ImageView) convertView.findViewById(R.id.footmark_photo);
holder.footmark_item_time = (TextView) convertView.findViewById(R.id.footmark_time);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.footmark_item_time.setText(footmarks.get(position).getLocation());
// 防止图片会加载两次,将其设为false
imageLoader.displayImage(footmarks.get(position).getPhoto(),new ImageViewAware(holder.footmark_item_image,false),options);
return convertView;
}
class ViewHolder {
ImageView footmark_item_image;
TextView footmark_item_time;
}
}