android开源框架Android-Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性:
(1)多线程加载图像(异步或同步);
(2)高度可定制化imageloader配置(线程池、图片下载器、解码器、内存和磁盘缓存、显示图像选项等);
(3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等);
(4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡);
(5)监听加载过程(包括下载进度);
下来我们详解如何配置使用Android-Universal-Image-Loader来加载网络图片
首先我们导入universal-image-loader.jar,然后Add to Build Path、开始初始化工作
import android.app.Application; import android.content.Context; import android.os.Handler; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; public class MyApplication extends Application{ /** * app的入口函数 */ @Override public void onCreate() { super.onCreate(); initImageLoader(this); } public static void initImageLoader(Context context) { // This configuration tuning is custom. You can tune every option, you may tune some of them, // or you can create default configuration by // ImageLoaderConfiguration.createDefault(this); // method. ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context); config.threadPriority(Thread.NORM_PRIORITY - 2); config.denyCacheImageMultipleSizesInMemory();//不会在内存中缓存多个大小的图片 config.diskCacheFileNameGenerator(new Md5FileNameGenerator());//为了保证图片名称唯一 config.diskCacheSize(50 * 1024 * 1024); // 50 MiB //内存缓存大小默认是:app可用内存的1/8 config.tasksProcessingOrder(QueueProcessingType.LIFO); config.writeDebugLogs(); // Remove for release app // Initialize ImageLoader with configuration. ImageLoader.getInstance().init(config.build()); // ImageLoader.getInstance().init( ImageLoaderConfiguration.createDefault(this)); } }
<application android:allowBackup="true" android:name="com.example.imageloader.global.MyApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
(1)初始化DisplayImageOptions(为了方便使用,我们将其抽取成一个类)
import android.graphics.Bitmap; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; /** * Android-Universal-Image-Loader-master 框架 options参数 * @author smartbetter * */ public interface ImageLoaderOptions { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片 .showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片 .showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片 .cacheInMemory(true)// 在内存中缓存该图片 .cacheOnDisk(true)// 在硬盘中缓存该图片 .imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高 .bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的 .considerExifParams(true)// 会识别图片的方向信息 // .displayer(new FadeInBitmapDisplayer(800)).build();//渐渐显示的动画效果 .displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果 // 显示大图的options DisplayImageOptions pager_options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片 .showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片 .showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片 .cacheInMemory(false)// 不在内存中缓存该图片 .cacheOnDisk(true)// 在硬盘中缓存该图片 .imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高 .bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的 .considerExifParams(true)// 会识别图片的方向信息 .displayer(new FadeInBitmapDisplayer(500)).build();// 渐渐显示的动画效果 // .displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果 }
(2)在getView方法中调用加载图片
/** * ImageLoader.getInstance().displayImage(uri, imageView); * ImageLoader.getInstance().displayImage(uri, imageView, options); * ImageLoader.getInstance().displayImage(uri, imageView, listener); * ImageLoader.getInstance().displayImage(uri, imageView, options, listener); * ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener); * 参数解析: * imageUrl : 图片的URL地址 * imageView : 显示图片的ImageView控件 * options : DisplayImageOptions配置信息 * listener : 图片下载情况的监听 * progressListener : 图片下载进度的监听 */ //加载图片 ImageLoader.getInstance().displayImage(Url.IMAGE, holder.iv_icon, ImageLoaderOptions.options);
-->拓展
渐渐显示的动画效果和圆角的效果不能同时设置,解决方法:我们在(1)中设置圆角效果,然后舍弃(2)的方法加载图片,而采用下面方法,到此,我们鱼与熊掌兼得。
//加载图片 ImageLoader.getInstance().displayImage(Url.IMAGE,holder.iv_icon, options ,new SimpleImageLoadingListener(){ @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); FadeInBitmapDisplayer.animate(view, 800);//渐渐显示的效果 } });