最近在做妙趣剪纸项目,剪纸应用项目链接。发扬传统文化,大家多多关注。

需要自己搭建服务器,我用的是新浪sae,简直秒杀京东云几条街,把图片放在网上下载,但是图片经常下载要遇到很多问题,包括oom等。所以研究了一下这个框架。

1.Universal-Image-Loader应用广泛,github地址

2.说说这个项目的优点:

(1)首先这个工具能够获取各个途径的图片,包括网络,文件,asserts,以及provider等。

(2)这个工具对网络下载进行了优化,能够自动实现内存和文件的缓存。

(3)这个工具能够对图片获取的全称进行监控跟踪。

3.这个工具怎么使用?

(1)首先github上面下载,然后把其中的jar包导入。

(2)写一个类实现Application,然后把application在manifest中的application标签中注册,由于application是单例,经常用来初始化一些变量。在oncreate()方法中,创建ImageLoader的配置参数,我们采取的是默认,只有设置了配置参数后才可以使用ImageLoader,不然会报错。只有yo代码如下:

public class MyApplication extends Application {  

    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                .createDefault(this);  

        //Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(configuration);
    }  

}  

(3)ImageLoader单例模式,有两个主要的方法displayImage(), loadImage(),。分别介绍如下:

loadImage()的相关代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
        String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";
        ImageSize mImageSize = new ImageSize(100, 100);  

        //显示图片的配置
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .build();  

        ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options, new SimpleImageLoadingListener(){  

            @Override
            public void onLoadingComplete(String imageUri, View view,
                    Bitmap loadedImage) {
                super.onLoadingComplete(imageUri, view, loadedImage);
                mImageView.setImageBitmap(loadedImage);
            }  

        });  

其中,ImageSize 这个用来在设置图片的饿大小。

DisplayImageOptions这个类用来对设置图片的加载,比如上例设置缓存在内存和文件中。

如果要对全称进行监控,最后一个参数可以实现ImageLoadingListener方法;代码如下:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
        String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";  

        ImageLoader.getInstance().loadImage(imageUrl, new ImageLoadingListener() {  

            @Override
            public void onLoadingStarted(String imageUri, View view) {  

            }  

            @Override
            public void onLoadingFailed(String imageUri, View view,
                    FailReason failReason) {  

            }  

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                mImageView.setImageBitmap(loadedImage);
            }  

            @Override
            public void onLoadingCancelled(String imageUri, View view) {  

            }
        });  

displayImage()方法示例代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
        String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";  

        //显示图片的配置
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.ic_stub)
                .showImageOnFail(R.drawable.ic_error)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .build();  

        ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);  

displayImage方法可以自动裁剪图片匹配控件。

5.可以打印图片加载过程:

代码如下:

public class MyApplication extends Application {  

    @Override
    public void onCreate() {
        super.onCreate();  

        //创建默认的ImageLoader配置参数
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
        .writeDebugLogs() //打印log信息
        .build();  

        //Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(configuration);
    }  

}  



6.我们在加载网络图片的时候,经常有需要显示图片下载进度的需求,Universal-Image-Loader当然也提供这样的功能,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了,代码如下

imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {  

            @Override
            public void onProgressUpdate(String imageUri, View view, int current,
                    int total) {  

            }
        });  

8.哈可以加载其他途径的代码:

String imagePath = "/mnt/sdcard/image.png";
        String imageUrl = Scheme.FILE.wrap(imagePath);
        String contentprividerUrl = "content://media/external/audio/albumart/13";  

        //图片来源于assets
        String assetsUrl = Scheme.ASSETS.wrap("image.png");  

        //图片来源于
        String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");  

需要像上面那样,包裹一下。

9.相信大部分人都是使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式

[java] view plaincopy在CODE上查看代码片派生到我的代码片

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
        gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));  

第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载

10.总结:

loadImage()方法主要通过回调ImageLoadingListener的onLoadingComplete方法,来显示图片。

diaplayImage()方法吧ImageView作为参数传进去,对iamgeView的是若引用,方便垃圾回收,并且可以根据控件的width和height属性,对土拍进行裁剪。

android 图片网络下载github开源框架之Universal-Image-Loader的更多相关文章

  1. Android酷炫实用的开源框架(UI框架)

    Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...

  2. Android酷炫实用的开源框架——UI框架(转)

    转载别人整理好的文章,列出了很多炫酷的UI开源设计 原文地址:http://www.androidchina.net/1992.html 1.Side-Menu.Android分类侧滑菜单,Yalan ...

  3. Android酷炫实用的开源框架(UI框架) 转

    Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...

  4. 黄聪:Android酷炫实用的开源框架(UI框架)(转)

    Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...

  5. IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

    每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...

  6. Android酷炫有用的开源框架

    一.代码库 1.from  代码家 整理比較好的源代码连接 一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSher ...

  7. Android当下最流行的开源框架总结

    Android中能够简化开发流程的一些框架 本文介绍的是一些博主在开发过程中经常用到的Android开源框架,所谓开源框架我的理解就是别人封装好的代码,可以直接拿过来使用,并且源码也全部公开的代码库. ...

  8. Android中常用的优秀开源框架

    Android开源框架库分类,挑选出最常用,最实用的开源项目,本篇主要介绍的是优秀开源框架库和项目,UI个性化控件会独立介绍.UI个性化控件 Index Dependency Injections A ...

  9. Android 学习笔记之Volley开源框架解析(一)

    PS:看完了LGD的六场比赛...让人心酸... 学习内容: 1.Http请求的过程... 2.Volley的简单介绍...   1.Http请求...   这里只是简单的说一下Http请求的过程.. ...

随机推荐

  1. 再谈前端HTML模板技术

    在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp.后面在外包公司为了快速交货,还是用了php Smart技术. web2.0后,前端模板技术风行. 代表有如下三大类: Str ...

  2. linux必知必会命令

  3. [USACO 08DEC]Secret Message

    Description Bessie is leading the cows in an attempt to escape! To do this, the cows are sending sec ...

  4. BZOJ 3817 Sum

    Description 给定正整数N,R.求 Input 第一行一个数 T,表示有 T 组测试数据. 接下来 T 行,每行两个正整数 n,r. Output 输出 T 行,每行一个整数表示答案. Sa ...

  5. ●Codevs 4158 残缺的字符串

    题链: http://codevs.cn/problem/4158/ 题解: FFT. 定义两个相同长度的字符串s1,s2的距离为 $$dis(s1,s2)=\sum_{i=0}^{len-1}(s1 ...

  6. Codeforces Round #403 (Div. 1, based on Technocup 2017 Finals)

    Div1单场我从来就没上过分,这场又剧毒,半天才打出B,C挂了好几次最后还FST了,回紫了. AC:AB Rank:340 Rating:2204-71->2133 Div2.B.The Mee ...

  7. ●BZOJ 3129 [Sdoi2013]方程

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3129 题解: 容斥,扩展Lucas,中国剩余定理 先看看不管限制,只需要每个位置都是正整数时 ...

  8. 【Codeforces Round #430 (Div. 2) A C D三个题】

    ·不论难度,A,C,D自己都有收获! [A. Kirill And The Game] ·全是英文题,述大意:    给出两组区间端点:l,r,x,y和一个k.(都是正整数,保证区间不为空),询问是否 ...

  9. 两道很好的dp题目【4.29考试】

    A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...

  10. Unix系统的文件目录项的内容是什么,这样处理的好处是什么?

    (Unix系统采用树型目录结构,而且目录中带有交叉勾链.每个目录表称为一个目录文件.一个目录文件是由目录项组成的.) 每个目录项包含16个字节,一个辅存磁盘块(512B)包含32个目录项.在目录项中, ...