ImageLoader(多线程异步加载和显示图片)

来源:互联网 发布:知在古文中的意思 编辑:程序博客网 时间:2024/05/21 22:47

首先 得添加依赖    右击App  找到 open  Module Settings  选中当前的Module 找到 Dependencies    点击+号   搜索 nostra                                           要记得添加访问网络的权限   Intent

 

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'


新建Class  命名BaseApplication   让它继承  Application   重写onCreate()方法      方法体中写

                         ImageLoaderUtil.init(this);这个时候回到配置文件中   在Application中添加属性 name , name中的内容就是.BaseApplication
新建Class  命名为  ImageLoaderUtil    创建两个静态方法 :

                  public static void init(Context context){ 别忘记最后有一行代码初始化};     

                 //一个带类型的方法  记得最后有返回值

                  public static DisplayOptions  getDefaultOption(){};


////////////////////////////////////////////////////////////举例  参考:

public class ImageLoaderUtil {    public static void init(Context context){     File cacheDir = StorageUtils.getCacheDirectory(context);  //默认SD卡缓存文件夹路径    //可以新建一个自己的缓存文件路径  /**         * 可以自己创建一个sd下面的文件夹作为硬盘缓存的路径         */       // File file = new File(Environment.getExternalStorageDirectory(),"image");       // if (! file.exists()){       //     file.mkdirs();       // } ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)  // default = device screen dimensions 内存缓存文件的最大长宽
  .memoryCacheExtraOptions(480, 800)  // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
 .diskCacheExtraOptions(480, 800, null) .threadPoolSize(3) // default  线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
 
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODEUIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.imageDownloader(new BaseImageDownloader(context)) // default
 .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// default

.writeDebugLogs() // 打印debug log
.build(); //开始构建
//初始化
ImageLoader.getInstance().init(config); }
public static DisplayImageOptions displayImageOptions(){
DisplayImageOptions options = new DisplayImageOptions.Builder()
 .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
 
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
 
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // default
 
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// default 设置图片以如何的编码方式显示
 
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
.displayer(new RoundedBitmapDisplayer(20))
// default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.build(); return options;///////////返回值 }}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  一般会在适配器做显示图片的操作:   

                       ImageLoader.getInstance().displayImage(uri, imageView, options);


//举例:这个地方           getImages是个集合  所以取集合中的第一个 的路径

ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0), vh.image, ImageLoaderUtil.displayImageOptions());





原创粉丝点击