Android学习笔记--universal_image_loader图片加载框架

昨天学习了universal_image_loader图片加载框架,今天把所学的和大家分享一下,

首先需要新建一个APP文件继承与Application

代码如下

  1 package com.wuxianedu.auniversalimageloader;
  2 
  3 import android.app.Application;
  4 import android.graphics.Bitmap;
  5 import android.os.Handler;
  6 import android.util.Log;
  7 
  8 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
  9 import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
 10 import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
 11 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 12 import com.nostra13.universalimageloader.core.ImageLoader;
 13 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
 14 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 15 import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
 16 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
 17 import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
 18 import com.nostra13.universalimageloader.utils.StorageUtils;
 19 
 20 import java.io.File;
 21 
 22 /**
 23  * Created by terry-song on 2016/10/7.
 24  *
 25  * 使用universal-imageloader
 26  * 1.引入
 27  * 2.初始化ImageLoader
 28  * 3.调用方法加载图片
 29  */
 30 
 31 public class App extends Application {
 32 
 33     private static final String TAG = "--Main--";
 34 
 35     @Override
 36     public void onCreate() {
 37         super.onCreate();
 38 
 39 //        createDefaultImageLoaderConfiguration();
 40 
 41             DisplayImageOptions options = new DisplayImageOptions.Builder()
 42                     .showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片
 43                     .showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片
 44                     .showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片
 45                     .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
 46                     .delayBeforeLoading(200)  // 下载前的延迟时间
 47                     .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
 48                     .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
 49                     .considerExifParams(false) // default
 50                     .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
 51                     .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
 52                     //                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
 53                     .displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间
 54                     //.displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
 55                     .handler(new Handler()) // default
 56                     .build();
 57 
 58             //设置图片缓存路径
 59             File cacheDir = StorageUtils.getCacheDirectory(this);
 60 
 61             Log.e(TAG, "onCreate: cacheDir===="+cacheDir );
 62             //自定义ImageLoaderConfiguration配置
 63             ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
 64                     .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高
 65     //                .diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个
 66                     .threadPoolSize(4) // default  线程池内加载的数量
 67     //                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
 68                     .tasksProcessingOrder(QueueProcessingType.FIFO) // default
 69                     .denyCacheImageMultipleSizesInMemory()
 70                     .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
 71                     .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
 72                     .memoryCacheSizePercentage(13) // default
 73                     //可以自定义缓存路径
 74                     .diskCache(new UnlimitedDiskCache(cacheDir))
 75                     .diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值
 76     //                .diskCacheFileCount(100)  // 可以缓存的文件数量
 77                     // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
 78                     .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
 79     //                 .connectTimeout (5 s), readTimeout (30 s)  //超时时间
 80                     //第二个参数:连接超时时间,第三个参数:读取超时时间
 81                     .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
 82                     .defaultDisplayImageOptions(options)
 83                     .writeDebugLogs() // 打印debug log
 84                     .build(); //开始构建
 85 
 86             //初始化ImageLoader
 87             ImageLoader.getInstance().init(configuration);
 88 
 89     }
 90 
 91     /**
 92      * 创建默认的ImageLoaderConfiguration
 93      * 对ImageLoader进行初始化
 94      */
      
     //默认的初始化方法,上面那些事自定义的 95 private void createDefaultImageLoaderConfiguration() { 96 //创建默认的ImageLoaderConfiguration 97 ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); 98 //初始化ImageLoader 99 ImageLoader.getInstance().init(configuration); 100 } 101 }

之后新建一个Java文件

WXHKdemo.java

 1 package com.wuxianedu.auniversalimageloader;
 2 
 3 import android.graphics.Bitmap;
 4 import android.os.Handler;
 5 import android.widget.ImageView;
 6 
 7 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 8 import com.nostra13.universalimageloader.core.ImageLoader;
 9 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
10 import com.nostra13.universalimageloader.core.assist.ImageSize;
11 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
12 import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
13 
14 /**
15  * Created by Administrator on 2016/10/7.
16  */
17 public class WXHKdemo {
18     private static WXHKdemo wxhlImageLoader;
19     //获取第三方的ImageLoader
20     private ImageLoader imageLoader;
21     //初始化实例
22     private WXHKdemo(){
23         //new出来一个实例,来让下面调用不出现空指针,
24         imageLoader = ImageLoader.getInstance();
25     }
26 
27     /**
28      * 单例
29      * @return
30      */
31     public static synchronized WXHKdemo getInstance(){
32 //        return wxhlImageLoader;
33         if(wxhlImageLoader == null){
34             wxhlImageLoader = new WXHKdemo();
35         }
36         return wxhlImageLoader;
37 
38 
39     }
40     private DisplayImageOptions options = new DisplayImageOptions.Builder()
41             .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
42             .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
43             .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
44             .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
45             .delayBeforeLoading(200)  // 下载前的延迟时间
46             .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
47             .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
48             .considerExifParams(false) // default
49             .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
50             .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
51 //                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
52             .displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间
53 //                .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
54             .handler(new Handler()) // default
55             .build();
56     /**
57      * 显示图片
58      * @param url
59      * @param imageView
60      */
61     public void displayHeaderImage(String url, ImageView imageView){
62         imageLoader.displayImage(url,imageView,options);
63     }
64 
65     /**
66      * 显示图片,带监听器
67      *
68      * @param imageView 组件
69      *
70      */
71     public void displayImage(String imageUrl, ImageView imageView){
72         imageLoader.displayImage(imageUrl,imageView);
73     }
74 
75     /**
76      * 加载图片,带监听器
77      * @param url
78      * @param imagelo
79      */
80     public void loadImage (String url,SimpleImageLoadingListener imagelo){
81         imageLoader.loadImage(url,imagelo);
82     }
83 
84 
85     public void loadImage(String url,int gao,int kuan,SimpleImageLoadingListener imagelo){
86         ImageSize imageSize = new ImageSize(gao,kuan);
87         imageLoader.loadImage(url,imageSize,imagelo);
88     }
89 
90 }

调用方法

 1 package com.wuxianedu.auniversalimageloader;
 2 
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.ImageView;
 9 
10 /**
11  * Created by terry-song on 2016/9/29.
12  */
13 
14 public class ImageAdapter extends BaseAdapter {
15 
16     private final WXHKdemo wxhlImageLoader;
17     private Context context;
18     private String[] imageUrls;
19 
20     public ImageAdapter(Context context, String[] imageUrls) {
21         this.context = context;
22         this.imageUrls = imageUrls;
23         wxhlImageLoader = WXHKdemo.getInstance();
24     }
25 
26     @Override
27     public int getCount() {
28         return imageUrls.length;
29     }
30 
31     @Override
32     public String getItem(int position) {
33         return imageUrls[position];
34     }
35 
36     @Override
37     public long getItemId(int position) {
38         return position;
39     }
40 
41     @Override
42     public View getView(int position, View convertView, ViewGroup parent) {
43         ViewHolder viewHolder;
44         if(convertView == null){
45             viewHolder = new ViewHolder();
46             convertView = LayoutInflater.from(context).inflate(R.layout.item_view,null);
47             viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_id);
48             convertView.setTag(viewHolder);
49         }else{
50             viewHolder = (ViewHolder) convertView.getTag();
51         }
52         ImageView imageView = viewHolder.imageView;
53 
54         // TODO: 2016/9/29  设置图片
55         if(position %2 == 0){
56             //使用之前WXHKdemo里面的方法
57             wxhlImageLoader.displayImage(imageUrls[position],imageView);
58         }else{
59             //使用之前WXHKdemo里面的方法
60             wxhlImageLoader.displayHeaderImage(imageUrls[position],imageView);
61         }
62 
63 
64         return convertView;
65     }
66 
67     class ViewHolder {
68         ImageView imageView;
69     }
70 }

写的有点乱,以后在整理

原文地址:https://www.cnblogs.com/langfei8818/p/5943897.html