第三方的图片加载( Android-Universal-Image-Loader)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三方的图片加载( Android-Universal-Image-Loader)相关的知识,希望对你有一定的参考价值。

 

 android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。

(1).使用多线程加载图片
(2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。

//第一种方法是去网上下载 

地址:https://github.com/nostra13/Android-Universal-Image-Loader

//第二种就是可以依赖 

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

 

 1   要应用就要先建一个App类 继承Application  两种加载
 2 
 3 public class App extends Application {
 4     @Override
 5     public void onCreate() {
 6         super.onCreate();
 7       
 8 //第一种是创建默认的加载 
 9 
10         //创建默认的ImageLoaderConfiguration
11         ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);
12         //初始化ImageLoader
13         ImageLoader.getInstance().init(configuration);
14 
15 //第二种是自定义加载
16  //自定义加载第三方图片样式
17         DisplayImageOptions options = new DisplayImageOptions.Builder()
18                 .showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片
19                 .showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片
20                 .showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片
21                 .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
22                 .delayBeforeLoading(200)  // 下载前的延迟时间
23                 .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
24                 .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
25                 .considerExifParams(false) // default
26                 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
27                 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
28 //                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
29                 .displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间
30 //                .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
31                 .handler(new Handler()) // default
32                 .build();
33 
34         //设置图片缓存路径
35         File cacheDir = StorageUtils.getCacheDirectory(this);
36         //自定义ImageLoaderConfiguration配置
37         ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
38                 .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高
39 //                .diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个
40                 .threadPoolSize(4) // default  线程池内加载的数量
41 //                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
42                 .tasksProcessingOrder(QueueProcessingType.FIFO) // default
43                 .denyCacheImageMultipleSizesInMemory()
44                 .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
45                 .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
46                 .memoryCacheSizePercentage(13) // default
47                 //可以自定义缓存路径
48                 .diskCache(new UnlimitedDiskCache(cacheDir))
49                 .diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值
50 //                .diskCacheFileCount(100)  // 可以缓存的文件数量
51                 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
52                 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
53 //                 .connectTimeout (5 s), readTimeout (30 s)  //超时时间
54                 //第二个参数:连接超时时间,第三个参数:读取超时时间
55                 .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
56                 .defaultDisplayImageOptions(options)
57                 .writeDebugLogs() // 打印debug log
58                 .build(); //开始构建
59 
60         //初始化ImageLoader
61         ImageLoader.getInstance().init(configuration);
62 
63     }
 1 在activity应用 
 2 
 3 public class MainActivity extends AppCompatActivity {
 4 
 5     private String url;
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main);
11 
12         //初始化组件
13          GridView gridView= (GridView) findViewById(R.id.lv);
14         gridView.setAdapter(new ImageAdapter(this,ImageUrlArrays.IMAGE_URL_ARRAYS));
15 
16 
17   /*  //初始化图片加载框架
18         final ImageLoader imageLoader = ImageLoader.getInstance();*/
19 
20         //第一种加载方式  需要个url图片地址
21         url = "http://www.chinagirlol.cc/data/attachment/forum/201412/03/233758hw7o7h08kkozkcwi.jpg";
22       imageLoader.displayImage(ImageUrlArrays.IMAGE_URL_ARRAYS[8],imageView);
23 
24     /*  //第二种加载方式
25         imageLoader.displayImage(url, imageView, new ImageLoadingListener() {
26             @Override  //刚开始加载的图片
27             public void onLoadingStarted(String s, View view) {
28                 imageView.setImageResource(R.drawable.image_nor);
29             }
30 
31             @Override //加载失败图片
32             public void onLoadingFailed(String s, View view, FailReason failReason) {
33 
34             }
35 
36             @Override//加载完成的图片
37             public void onLoadingComplete(String s, View view, Bitmap bitmap) {
38                 imageView.setImageBitmap(bitmap);
39             }
40 
41             @Override//取消加载
42             public void onLoadingCancelled(String s, View view) {
43 
44             }
45         });*/
46 
47      /*   //第三种加载方式  设固定宽高
48         ImageSize imageSize=new ImageSize(140,160);
49         imageLoader.loadImage(ImageUrlArrays.IMAGE_URL_ARRAYS[10],imageSize,new SimpleImageLoadingListener(){
50             @Override
51             public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
52                 super.onLoadingComplete(imageUri, view, loadedImage);
53                 imageView.setImageBitmap(loadedImage);
54             }
55         });
56 */
57        }
58     }

 以上代码在以后的修改比较麻烦 所以我们可以自己在封装起来,变成自己的再用,方便修改

 1 public class WXHLImageLoader {
 2 
 3     //懒汉单例
 4     private static WXHLImageLoader wxhlImageLoader;
 5     //获取第三方的ImageLoader
 6     private ImageLoader imageLoader;
 7 
 8     private WXHLImageLoader(){
 9         imageLoader = ImageLoader.getInstance();
10     }
11 
12     /**
13      * 单例
14      * @return
15      */
16     public static synchronized WXHLImageLoader getInstance(){
17 //        return wxhlImageLoader;
18         if(wxhlImageLoader == null){
19             wxhlImageLoader = new WXHLImageLoader();
20         }
21         return wxhlImageLoader;
22     }
23 
24     /**
25      * 显示图片
26      * @param imageUrl
27      * @param imageView
28      */
29     public void displayImage(String imageUrl, ImageView imageView){
30         imageLoader.displayImage(imageUrl,imageView);
31     }
32 
33     /**
34      * 显示图片,带监听器的
35      * @param imageUrl
36      * @param imageView
37      */
38     public void displayImage(String imageUrl, ImageView imageView,ImageLoadingListener listener){
39         imageLoader.displayImage(imageUrl,imageView,listener);
40     }
41 
42     /**
43      * 加载图片,带监听器的
44      * @param imageUrl
45      * @param listener
46      */
47     public void loadImage(String imageUrl, SimpleImageLoadingListener listener){
48         imageLoader.loadImage(imageUrl,listener);
49     }
50 
51     /**
52      * 加载图片,带监听器的
53      * @param imageUrl
54      * @param listener
55      */
56     public void loadImage(String imageUrl, int width, int height, SimpleImageLoadingListener listener){
57         ImageSize targetSize = new ImageSize(width, height); // result Bitmap will be fit to this size
58         imageLoader.loadImage(imageUrl,targetSize,listener);
59     }
60 
61 
62 }

 

 

 



以上是关于第三方的图片加载( Android-Universal-Image-Loader)的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用第三方中的加载器?+处理图片案例

关于图片加载框架

Android图片加载库的封装实战之路

Android中常见的图片加载框架

Android 加载大图

手机浏览器加载不出来图片怎么办?