标签:
Universal_imageLoader的使用;
1,图片处理的常见问题。
oom内存溢出,
图片尺寸和缩略图的处理平衡
网络图片加载和缓存机制
Universal-ImageLoader特点:
? 支持本地图片和网络图片的多线程异步加载和缓存处理
? 个性化的配置自己项目的ImageLoader
? 图片加载过程的监听回调
? 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM
? 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片
1,配置application
package com.jike.imageloaderdemo; import java.io.File; import android.app.Application; import android.graphics.Bitmap; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; 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.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; public class MyApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this) .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽 .discCacheExtraOptions(480, 800, null) // Can slow ImageLoader, use it carefully (Better don‘t use // it)/设置缓存的详细信息,最好不要设置这个 .threadPoolSize(3) // 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache // implementation/你可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) .discCacheSize(50 * 1024 * 1024) .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的URI名称用MD5 加密 .tasksProcessingOrder(QueueProcessingType.LIFO) .discCacheFileCount(100) // 缓存的文件数量 .discCache( new UnlimitedDiscCache(new File(Environment .getExternalStorageDirectory() + "/myApp/imgCache"))) // 自定义缓存路径 .defaultDisplayImageOptions(getDisplayOptions()) .imageDownloader( new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) .writeDebugLogs() // Remove for release app .build();// 开始构建 ImageLoader.getInstance().init(config); } private DisplayImageOptions getDisplayOptions() { DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) // 设置图片在下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中 .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// // .delayBeforeLoading(int delayInMillis)//int // delayInMillis为你设置的下载前的延迟时间 // 设置图片加入缓存前,对bitmap进行设置 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位 .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少 .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 .build();// 构建完成 return options; } }
2,在activity中引用。
package com.jike.imageloaderdemo; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; /** * 1、 Universal-ImageLoader的配置 * * 2、用Universal-ImageLoader加载网络图片和本地图片 * * @author Administrator * */ public class MainActivity extends Activity { private ImageLoader loader; private ImageView iv_img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loader = ImageLoader.getInstance(); iv_img = (ImageView) this.findViewById(R.id.iv_img); String uri = "file:///" + "本地路径"; // loader.displayImage( // "http://s1.jikexueyuan.com/current/static/images/logo.png", // iv_img); loader.displayImage( "http://s1.jikexueyuan.com/current/static/images/logo.png", iv_img, new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { Log.i("info", "onLoadingStarted"); } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { Log.i("info", "onLoadingFailed"); } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { Log.i("info", "onLoadingComplete"); } @Override public void onLoadingCancelled(String arg0, View arg1) { Log.i("info", "onLoadingCancelled"); } }); } }
标签:
原文地址:http://my.oschina.net/u/2480757/blog/518871