版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33776306/article/details/52055703
我们经常会从网上加载大量的图片,处理不好,经常会出现内存溢出,导致app崩溃,还有下载速度慢登问题。ImageLoader基本避免了这些问题,下载速度快,基本不会出现内存泄漏,还有很好的缓存管理机制,自己感觉很好用的,下面,给大家分享一下其简单的使用方法,主要是java代码,布局比较简单就不贴了:
1,强jar包导入到libs目录下;
下载地址:https://github.com/nostra13/Android-Universal-Image-Loader
2,重写Application,实例化imageloader;
<span style="font-size:18px;color:#009900;">import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
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 com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import android.app.Application;
import android.graphics.Bitmap;
import android.os.Environment;
import android.os.Handler;
public class MyApplication extends Application{
private MyApplication instance;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
initImageloader();
}
public void initImageloader() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
// 设置图片下载期间显示的图
.showImageOnLoading(R.drawable.ic_launcher)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)
// 设置图片加载/解码过程中错误时候显示的图片
.showImageOnFail(R.drawable.ic_launcher)
// 设置图片在下载前是否重置,复位
.resetViewBeforeLoading(false)
// 设置下载的图片是否缓存在内存
.cacheInMemory(true)
// 设置下载的图片是否缓存在SD卡中
.cacheOnDisk(true)
// 保留Exif信息
.considerExifParams(true)
// 设置图片以如何的编码方式显示
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// 设置图片的解码类型
.bitmapConfig(Bitmap.Config.ARGB_8888)
// 设置成圆角图
.displayer(new RoundedBitmapDisplayer(20))
// 设置图片下载前的延迟
.delayBeforeLoading(100)// int
.handler(new Handler()) //
.build();; // 创建配置过得DisplayImageOption对象
//// 自定义缓存的路径
File picPath = new File(Environment.getExternalStorageDirectory()
.getPath()+ File.separator+ "MyDemo"+ File.separator+ "files");
// ImageLoaderConfiguration的配置主要是全局性的配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
// max width, max height,即保存的每个缓存文件的最大长宽
.memoryCacheExtraOptions(480, 800)
// default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
//线程池内加载的数量
.threadPoolSize(3)
// 线程优先级
.threadPriority(Thread.NORM_PRIORITY - 1)
// default
.tasksProcessingOrder(QueueProcessingType.FIFO)
// default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13)
//// 自定义缓存路径
.diskCache(new UnlimitedDiskCache(picPath))
//硬盘缓存50MB
.diskCacheSize(50 * 1024 * 1024)
//缓存的文件数量
.diskCacheFileCount(1000)
//将保存的时候的URI名称用MD5
// .diskCacheFileNameGenerator(new Md5FileNameGenerator())
// 将保存的时候的URI名称用HASHCODE加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
// default
.imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
// connectTimeout (5 s), readTimeout (30 s)超时时间
// .imageDownloader( new BaseImageDownloader(context, 5 * 1000, 30 * 1000))
.imageDecoder(new BaseImageDecoder(true)) // default
.defaultDisplayImageOptions(options) // default
.writeDebugLogs().build();
// 全局初始化此配置
ImageLoader.getInstance().init(config);</span><pre name="code" class="html"></span></span></span>
3,listview适配器
<span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:14px;color:#009900;">package com.example.image_loader;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
public class ImgListAdapter extends BaseAdapter{
class ViewHolder {
public ImageView Img;
}
private Context context;
private LayoutInflater layoutinflater;
private String[] imageUrls;
public ImgListAdapter(String[] urls, Context context) {
this.context = context;
this.imageUrls = urls;
this.layoutinflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return imageUrls.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int id) {
// TODO Auto-generated method stub
return id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutinflater.inflate(R.layout.item_list_image, null);
viewHolder = new ViewHolder();
viewHolder.Img=(ImageView) convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 通过ImageLoader来获取网络图片
ImageLoader.getInstance().displayImage(imageUrls[position],
viewHolder.Img);
return convertView;
}
}</span>
</span></span></span>
4,listviewActivity代码
<span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;"><span style="font-size:18px;color:#009900;">public class ListViewActivity extends Activity{
ImgListAdapter adapter;
private ImageView img;
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
listview = (ListView) findViewById(R.id.list);
adapter = new ImgListAdapter(ImgUrl.IMAGES,getApplicationContext());
listview.setAdapter(adapter);
listview.setOnScrollListener(new PauseOnScrollListener(ImageLoader
.getInstance(), false, true));
}
}
</span></span></span>
manifest中权限添加
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name="MyApplication"
.....
>