zoukankan      html  css  js  c++  java
  • universalImageloder

    特点

    1. 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
    2. 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
    3. 支持图片的内存缓存,文件系统缓存或者SD卡缓存
    4. 支持图片下载过程的监听
    5. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
    6. 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
    7. 提供在较慢的网络下对图片进行加载

    使用过程:

    创建默认的ImageLoader,所有的操作都由ImageLoader控制。该类使用单例设计模式,所以如果要获取该类的实力,需要调用getInstance()方法。在使用ImageLoader显示图片之前,你首先要初始化它的配置,调用ImageLoaderConfiguration的init()方法,然后你就可以实现各种的显示了。

            //创建默认的ImageLoader配置参数  
            ImageLoaderConfiguration configuration = ImageLoaderConfiguration  
                    .createDefault(this);  
            //Initialize ImageLoader with configuration.  
            ImageLoader.getInstance().init(configuration); 


    自定义配置imageloader, 就像你已经知道的,首先,你需要使用ImageLoaderConfiguration对象来初始化ImageLoader。由于ImageLoader是单例,所以在程序开始的时候只需要初始化一次就好了。建议你在Activity的onCreate()方法中初始化。如果一个ImageLoader已经初始化过,再次初始化不会有任何效果。下面我们通过ImageLoaderConfiguration.Builder创建一个设置

    ——————————————————————————————————————————

    单例模式

    单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案
     
    显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
    从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
    在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
     
    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
    一般Singleton模式通常有三种形式:
    第一种形式:懒汉式,也是常用的形式。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class SingletonClass{
        private static SingletonClass instance=null;
        public static synchronized SingletonClass getInstance()
        {
            if(instance==null)
            {
                   instance=new SingletonClass();
            }
            return instance;
        }
        private SingletonClass(){
        }
    }
    第二种形式:饿汉式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //对第一行static的一些解释
    // java允许我们在一个类里面定义静态类。比如内部类(nested class)。
    //把nested class封闭起来的类叫外部类。
    //在java中,我们不能用static修饰顶级类(top level class)。
    //只有内部类可以为static。
    public class Singleton{
        //在自己内部定义自己的一个实例,只供内部调用
        private static final Singleton instance = new Singleton();
        private Singleton(){
            //do something
        }
        //这里提供了一个供外部访问本class的静态方法,可以直接访问
        public static Singleton getInstance(){
            return instance;
        }
    }
    第三种形式: 双重锁的形式。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class Singleton{
        private static Singleton instance=null;
        private Singleton(){
            //do something
        }
        public static Singleton getInstance(){
            if(instance==null){
                synchronized(Singleton.class){
                    if(null==instance){
                        instance=new Singleton();
                    }
                }
            }
            return instance;
        }
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    //这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。

    ——————————————————————————————————————

    目录结构

    src: 存放java代码

    gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id

    project.properties: 指定当前工程采用的开发工具包的版本

    libs: 当前工程所依赖的jar包.

    assets: 放置一些程序所需要的媒体文件.

    bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件.

    res(resources): 资源文件.

    drawable: 存放程序所用的图片.

    layout: 存放android的布局文件.

    menu: 存放android的OptionsMenu菜单的布局.

    values (应用程序所需要的数据. 会在R文件中生成id)

    strings.xml 存放android字符串.

    dimens.xml 存放屏幕适配所用到的尺寸.

    style.xml 存放android下显示的样式.

    values-sw600dp 7寸平板所对应的值

    values-sw720dp-land 10寸平板所对应的值

    values-v11 指定3.0版本以上的手机显示的样式.

    values-v14 指定4.0版本以上的手机显示的样式.

    AndroidManifest.xml: android应用程序的入口文件. 声明了android里边的组件. 和相关配置信息.

    proguard-project.txt: 加密当前程序所使用.

    ————————————————————————————————

     一、介绍

     Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。所以,如果你的程序里需要这个功能的话,那么不妨试试它。因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面。

    二、特点


    多线程的图像加载
    的可能性的宽调谐对ImageLoader的配置(线程池的大小,HTTP选项,内存和光盘高速缓存,显示图像,以及其他)
    的图像的可能性中的缓存存储器和/或设备的文件器系统(或SD卡)
    可以“听”加载过程中
    可自定义每个显示的图像调用分隔的选项
    Widget支持
    Android 1.5以上支持
    简单描述一下这个项目的结构:每一个图片的加载和显示任务都运行在独立的线程中,除非这个图片缓存在内存中,这种情况下图片会立即显示。如果需要的图片缓存在本地,他们会开启一个独立的线程队列。如果在缓存中没有正确的图片,任务线程会从线程池中获取,因此,快速显示缓存图片时不会有明显的障碍。

    三、使用方法

    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
    注册网络权限和外部写入权限

    设置缓存目录

    1. File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");  
    2. 之后在ImageLoaderConfiguration的配置文件中通过设置    .discCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径  

    下面我们就来开始看如何使用这个图片异步加载库把:

    一.

            先要配置ImageLoaderConfiguration这个类实现全局ImageLoader的实现情况。

    可以选择在Application中初始化设置该类。

    1. ImageLoaderConfiguration config = new ImageLoaderConfiguration  
    2.     .Builder(context)  
    3.     .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽  
    4.     .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息,最好不要设置这个  
    5.     .threadPoolSize(3)//线程池内加载的数量  
    6.     .threadPriority(Thread.NORM_PRIORITY - 2)  
    7.     .denyCacheImageMultipleSizesInMemory()  
    8.     .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现  
    9.     .memoryCacheSize(2 * 1024 * 1024)    
    10.     .discCacheSize(50 * 1024 * 1024)    
    11.     .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密  
    12.     .tasksProcessingOrder(QueueProcessingType.LIFO)  
    13.     .discCacheFileCount(100) //缓存的文件数量  
    14.     .discCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径  
    15.     .defaultDisplayImageOptions(DisplayImageOptions.createSimple())  
    16.     .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间  
    17.     .writeDebugLogs() // Remove for release app  
    18.     .build();//开始构建  
    19.     // Initialize ImageLoader with configuration.  

    以上的配置看个人需求进行选择,不是所有都要进行配置。

    配置好ImageLoaderConfiguration后,调用以下方法来实现初始化:

    1. ImageLoader.getInstance().init(config);//全局初始化此配置  

    注:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是将缓存下来的文件以什么方式命名

              里面可以调用的方法有  1.new Md5FileNameGenerator() //使用MD5对UIL进行加密命名

                                                    2.new HashCodeFileNameGenerator()//使用HASHCODE对UIL进行加密命名

    二.

            使用ImageLoader进行图片加载的时候,先要实例化ImageLoader,调用以下方法进行实例化,在每个布局里面都要实例化后再使用。

     

    原文:http://blog.csdn.net/vipzjyno1/article/details/23206387

    protected ImageLoader imageLoader = ImageLoader.getInstance(); 

    之后进行显示的图片的各种格式DisplayImageOptions 的设置:

    1. DisplayImageOptions options;  
    2. options = new DisplayImageOptions.Builder()  
    3.  .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片  
    4.  .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片  
    5. .showImageOnFail(R.drawable.ic_launcher)  //设置图片加载/解码过程中错误时候显示的图片
    6. .cacheInMemory(true)//设置下载的图片是否缓存在内存中  
    7. .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中  
    8. .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
    9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示  
    10. .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//  
    11. .decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置  
    12. //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
    13. //设置图片加入缓存前,对bitmap进行设置  
    14. //.preProcessor(BitmapProcessor preProcessor)  
    15. .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位  
    16. .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少  
    17. .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间  
    18. .build();//构建完成  

    注:

      以上配置中的:

     1).imageScaleType(ImageScaleType imageScaleType)  是设置 图片的缩放方式
         缩放类型mageScaleType:

                  EXACTLY :图像将完全按比例缩小的目标大小

                  EXACTLY_STRETCHED:图片会缩放到目标大小完全

                  IN_SAMPLE_INT:图像将被二次采样的整数倍

                  IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小

                  NONE:图片不会调整
      2).displayer(BitmapDisplayer displayer)   是设置 图片的显示方式

          显示方式displayer:

                  RoundedBitmapDisplayer(int roundPixels)设置圆角图片

                  FakeBitmapDisplayer()这个类什么都没做

                  FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间

             SimpleBitmapDisplayer()正常显示一张图片  

    之后按照需求调用

    1.纯粹为了加载默认配置的一个图片的

      方法:

      public void displayImage(String uri, ImageView imageView) {}

     

    ________________________________________________

    原文:http://www.tuicool.com/articles/UNJNryz

    http://www.cnblogs.com/kissazi2/p/3911472.html

    ________________________________________________

    如果您看见了我的文章,希望得到您的支持,由衷感谢!
  • 相关阅读:
    Tomcat系列(10)——Tomcat主要设计模式5种(外观,责任链,观察者,模板方法,命令模式)
    Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)
    Tomcat系列(8)——Tomcat运行模式连接数和线程池
    Tomcat系列(7)——Tomcat类加载机制
    Tomcat系列(6)——Tomcat处理一个HTTP请求的过程
    Tomcat系列(5)——Tomcat配置详细部分
    Tomcat系列(4)——Tomcat 组件及架构详细部分
    Tomcat系列(3)——Tomcat 组件及架构核心部分 4类主要组件(顶层,连接器,容器,嵌套)
    Tomcat系列(2)——Tomcat文件目录7个
    Tomcat系列(1)——Tomcat安装配置
  • 原文地址:https://www.cnblogs.com/h4ck/p/5405406.html
Copyright © 2011-2022 走看看