发表文章

[最新] ImageLoder的使用方法

ahaochina 3月前 1



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

     下载地址:

      http://github.com/nostra13/Android-Universal-Image-Loader

  

      ImageLoaderConfiguration:

      是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。

    DisplayImageOptions:

      用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。

     ImageLoader:

     是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。

     //图片缓存的全局配置,要有线程类、缓存大小、图片下载与解析、日志方面的配置

     ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);

     //内存缓存图片的最大宽高

      builder.memoryCacheExtraOptions(480,800);

      //线程池数

      builder.threadPoolSize(3);

      //线程优先级

      builder.threadPriority(Thread.NORM_PRIORTY+1);

      /**

      * 设置在内存中缓存图像的多种尺寸

      * 加载同一URL图片时,imageView从小变大时,从内存中加载

      *  不建议使用

      */

       builder.denyCacheImageMultipleSizesInMemory();

       //超过设定的缓存大小时,磁盘缓存的清除机制

       File cacheDir = new File("/mnt/sdcard/cache/");

       builder.diskCache(new UnlimitedDiskCache(cacheDir));

       //磁盘缓存的文件命名方式,一般使用默认值(获取文件名称的hashcode然后转换成字符串)

       bulider.diskCacheFileNameFenerator(new HashCodeFileNameGenerator());

       //MD5-new Md5FileNameGenerator()源文件的名称同过md5加密后保存

      builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());

      builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());

      //最大缓存大小。默认值应用程序可用内存的1/8.

      builder.memoryCacheSize(100);

      //开启ImageLoader工作日志

      builder.writeDebugLogs();

      //图片处理器,负责从磁盘缓存读取或写入前对图片进行处理

      builder.diskCacheExtraOptions(480,800,null);

      

    

      //获取ImageLoaderConfiguration对象

      ImageLoaderConfiguration  configuration = builder.build();

      //创建ImageLoader实例

      ImageLoader  imageloader = ImageLoader.getInstance();

      imageloader.init(configuration);

      


       DisplayImageOptions.Builder     optionsBuilder = new    DisplayImageOptions.Builder();

       //设置图片在下载期间显示的图片

      optionsBuilder.showImageOnLoading(R.drawable.ic_launcher);

      //设置图片Uri为空或是错误的时候显示的图片

     optionsBuilder.showImageForEmptyUri(R.drawable.ic_launcher);

     //设置图片加载/解码过程中失败时候显示的图片

    optionsBuilder.showImageOnFail(R.drawable.ic_launcher);

     //设置图片是否缓存到内存中

    optionsBuilder.cacheInMemory(true);

    //设置下载的图片是否缓存在SD卡中

  optionsBuilder.cacheOnDisk(ture);

   //是否考虑JPEG图像EXIF参数(旋转,翻转)

 optionsBuilder.considderExifParams(true);

  //设置图片以如何的编码方式显示

 optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);

   optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);

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

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

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

   ImageScaleType.IN_SAMPLE_POWER_OF_2:

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

    ImageScaleType.NONE:图片不会调整


   //设置图片的解码类型/默认是ARGB_8888,使用RGB_565会比ARGB_8888少消耗2倍内存

  optionsBuilder. bitmapConfig(Bitmap.Config.RGB_565);

   //为你设置下载前的延迟时间

  optionsBuilder.delayBeforeLoading(0);

   //设置图片在下载前是否重置,复位

  optionsBuilder.resetViewBeforeLoading(true);

  /**

   * 不推荐用!!!是否设置为圆角,弧度为多少

   *  他会创建新的ARGB_8888格式的Bitmap对象

   */

    //设置为圆角

    optionsBuilder.displayer(new RoundedBitmapDisplayer(20));

    //设置为方角

   optionsBuilder.displayer(new FadeInBitmapDisplayer(100));

    //构建完成

    DisplayImageOptions   options = optionsBuilder.build();

  

    退出程序时清理

     //清除磁盘缓存

     ImageLoader.getInstance().clearDiskCache();

     //清除内存缓存

     ImageLoader.getInstance().clearMemoryCache();


     请求方法为:

    


    ImageLoader支持的Url

 

     // from Web

      http://site.com/image.png

      // from SD card

       file:///mnt/sdcard/image.png

     // from SD card(video thumbnail)

       file:///mnt/sdcard/video.mp4

     // from content provider

      content://media/external/images/media/13

      // from content provider (video thumbnail)

      content://media/external/video/media/13

      // from assets

      assets://image.png

     // from drawables (non-9patch images)

     drawable://" +R.drawable.img


    ImageLoader的简单使用方法

   

          //创建实例

          ImageLoaderimageLoader =ImageLoader.getInstance();

           //加载并显示图片

           方法一:

             imageLoader.displayImage(imageUri,imageView);

           方法二:回调方式

           imageLoader.loadImage(imageUri, newSimpleImageLoadingListener() {

             @Override

           public void onLoadingComplete(StringimageUri,Viewview,BitmaploadedImage)

           {

              // Dowhatever you want with Bitmap

           }

      });

            方法三:同步的方式获取图片

         Bitmap bmp = imageLoader.loadImageSync(imageUri);


        ImageLoader的复杂使用

         方法一:

        

          方法二:

          

       方法三:

  

      使用ImageLoader时,需要配置如下权限:

        <!-- Include following permission if you load imagesfrom Internet -->

         <uses-permission android:name="android.permission.INTERNET" />

       <!-- Include following permission if you want tocache images on SD card -->

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


    在这里特别要注意的是在Application或者第一个Activity进行初始化


  

    在此附上代码如下:

    public class MainActivity extends Activity {

    private GridView gv;
    private ImageLoader instance;
    private ImageLoaderConfiguration configuration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        // 创建配置信息
        instance = ImageLoader.getInstance();
        // 加载配置信息
        instance.init(configuration);
        // 加载配置
        // instance.init(ImageLoaderConfiguration.createDefault(this));
        gv.setAdapter(new MyAdapter(instance, this));
    }

    private void init() {
        gv = (GridView) findViewById(R.id.gv);

        // 图片缓存的全局配置(在网上加载)
        ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
        // 内存缓存图片的最大宽度
        builder.memoryCacheExtraOptions(480, 800);
        // 线程池
        builder.threadPoolSize(3);
        // 线程优先级
        builder.threadPriority(Thread.NORM_PRIORITY + 1);
        // 设置硬盘的图片的最大高度
        builder.diskCacheExtraOptions(480, 800, null);
        // 超过设定的缓存大小时,内存缓存清除机制
        builder.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024));
        // 超过设定的缓存大小时,磁盘缓存的清除机制
        File file = new File(Environment.getExternalStorageDirectory().getParent() + "/cache");
        builder.diskCache(new UnlimitedDiskCache(file));
        // 给文件命名,一般使用默认值(使用md5加密)
        builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());

        DisplayImageOptions.Builder optionBuilder = new DisplayImageOptions.Builder();
        // 设置图片URI为空或是错误的时候显示的图片
        optionBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
        // 设置图片在下载期间显示的图片
        optionBuilder.showImageOnLoading(R.drawable.ic_launcher);
        // 设置图片加载/解码过程中失败时候显示的图片
        optionBuilder.showImageOnFail(R.drawable.ic_launcher);
        // 设置下载的图片是否缓存在内存中
        optionBuilder.cacheInMemory(true);
        // 设置下载的图片是否缓存在SD卡中
        optionBuilder.cacheOnDisk(true);
        // 设置图片的圆弧
        optionBuilder.displayer(new RoundedBitmapDisplayer(25));
        // 将optionBuilder放到DisplayImageOptions中
        DisplayImageOptions options = optionBuilder.build();
        // 将DisplayImageOptions加载到configuration的builder容器中
        builder.defaultDisplayImageOptions(options);

        // 创造出配置类
        configuration = builder.build();
    }

    @Override
    protected void onDestroy() {
        if (instance != null) {
            instance.clearDiskCache();
            instance.clearMemoryCache();
        }
    }
}





    public class MyAdapter extends BaseAdapter {
    private ImageLoader imageloader;
    private Context context;

    //str为URL地址

    private String[] str;

    public MyAdapter(ImageLoader imageloader, Context context) {
        super();
        this.imageloader = imageloader;
        this.context = context;
        str = ImageAddress.imageThumbUrls;
    }

    public int getCount() {
        return str != null ? str.length : 0;
    }

    public Object getItem(int position) {
        return str[position];
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        holder ho;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.gvitem, null);
            ho = new holder();
            ho.iv = (ImageView) convertView.findViewById(R.id.iv);
            convertView.setTag(ho);
        }else{
            ho = (holder) convertView.getTag();
        }
        imageloader.displayImage(str[position], ho.iv);
        return convertView;
    }
    static class holder {
        ImageView iv;
    }
}



//设置圆形图片

ImageLoader instance = ImageLoader.getInstance();
instance.init(ImageLoaderConfiguration.createDefault(this));

DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new CircleBitmapDisplayer()).build();

instance.displayImage(“图片地址”, “控件”, options);


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

     下载地址:

      http://github.com/nostra13/Android-Universal-Image-Loader

  

      ImageLoaderConfiguration:

      是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。

    DisplayImageOptions:

      用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。

     ImageLoader:

     是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。

     //图片缓存的全局配置,要有线程类、缓存大小、图片下载与解析、日志方面的配置

     ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);

     //内存缓存图片的最大宽高

      builder.memoryCacheExtraOptions(480,800);

      //线程池数

      builder.threadPoolSize(3);

      //线程优先级

      builder.threadPriority(Thread.NORM_PRIORTY+1);

      /**

      * 设置在内存中缓存图像的多种尺寸

      * 加载同一URL图片时,imageView从小变大时,从内存中加载

      *  不建议使用

      */

       builder.denyCacheImageMultipleSizesInMemory();

       //超过设定的缓存大小时,磁盘缓存的清除机制

       File cacheDir = new File("/mnt/sdcard/cache/");

       builder.diskCache(new UnlimitedDiskCache(cacheDir));

       //磁盘缓存的文件命名方式,一般使用默认值(获取文件名称的hashcode然后转换成字符串)

       bulider.diskCacheFileNameFenerator(new HashCodeFileNameGenerator());

       //MD5-new Md5FileNameGenerator()源文件的名称同过md5加密后保存

      builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());

      builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());

      //最大缓存大小。默认值应用程序可用内存的1/8.

      builder.memoryCacheSize(100);

      //开启ImageLoader工作日志

      builder.writeDebugLogs();

      //图片处理器,负责从磁盘缓存读取或写入前对图片进行处理

      builder.diskCacheExtraOptions(480,800,null);

      

    

      //获取ImageLoaderConfiguration对象

      ImageLoaderConfiguration  configuration = builder.build();

      //创建ImageLoader实例

      ImageLoader  imageloader = ImageLoader.getInstance();

      imageloader.init(configuration);

      


       DisplayImageOptions.Builder     optionsBuilder = new    DisplayImageOptions.Builder();

       //设置图片在下载期间显示的图片

      optionsBuilder.showImageOnLoading(R.drawable.ic_launcher);

      //设置图片Uri为空或是错误的时候显示的图片

     optionsBuilder.showImageForEmptyUri(R.drawable.ic_launcher);

     //设置图片加载/解码过程中失败时候显示的图片

    optionsBuilder.showImageOnFail(R.drawable.ic_launcher);

     //设置图片是否缓存到内存中

    optionsBuilder.cacheInMemory(true);

    //设置下载的图片是否缓存在SD卡中

  optionsBuilder.cacheOnDisk(ture);

   //是否考虑JPEG图像EXIF参数(旋转,翻转)

 optionsBuilder.considderExifParams(true);

  //设置图片以如何的编码方式显示

 optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);

   optionsBuilder.imageScaleType(ImageScaleType.IN_SAMPLE_INT);

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

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

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

   ImageScaleType.IN_SAMPLE_POWER_OF_2:

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

    ImageScaleType.NONE:图片不会调整


   //设置图片的解码类型/默认是ARGB_8888,使用RGB_565会比ARGB_8888少消耗2倍内存

  optionsBuilder. bitmapConfig(Bitmap.Config.RGB_565);

   //为你设置下载前的延迟时间

  optionsBuilder.delayBeforeLoading(0);

   //设置图片在下载前是否重置,复位

  optionsBuilder.resetViewBeforeLoading(true);

  /**

   * 不推荐用!!!是否设置为圆角,弧度为多少

   *  他会创建新的ARGB_8888格式的Bitmap对象

   */

    //设置为圆角

    optionsBuilder.displayer(new RoundedBitmapDisplayer(20));

    //设置为方角

   optionsBuilder.displayer(new FadeInBitmapDisplayer(100));

    //构建完成

    DisplayImageOptions   options = optionsBuilder.build();

  

    退出程序时清理

     //清除磁盘缓存

     ImageLoader.getInstance().clearDiskCache();

     //清除内存缓存

     ImageLoader.getInstance().clearMemoryCache();


     请求方法为:

    


    ImageLoader支持的Url

 

     // from Web

      http://site.com/image.png

      // from SD card

       file:///mnt/sdcard/image.png

     // from SD card(video thumbnail)

       file:///mnt/sdcard/video.mp4

     // from content provider

      content://media/external/images/media/13

      // from content provider (video thumbnail)

      content://media/external/video/media/13

      // from assets

      assets://image.png

     // from drawables (non-9patch images)

     drawable://" +R.drawable.img


    ImageLoader的简单使用方法

   

          //创建实例

          ImageLoaderimageLoader =ImageLoader.getInstance();

           //加载并显示图片

           方法一:

             imageLoader.displayImage(imageUri,imageView);

           方法二:回调方式

           imageLoader.loadImage(imageUri, newSimpleImageLoadingListener() {

             @Override

           public void onLoadingComplete(StringimageUri,Viewview,BitmaploadedImage)

           {

              // Dowhatever you want with Bitmap

           }

      });

            方法三:同步的方式获取图片

         Bitmap bmp = imageLoader.loadImageSync(imageUri);


        ImageLoader的复杂使用

         方法一:

        

          方法二:

          

       方法三:

  

      使用ImageLoader时,需要配置如下权限:

        <!-- Include following permission if you load imagesfrom Internet -->

         <uses-permission android:name="android.permission.INTERNET" />

       <!-- Include following permission if you want tocache images on SD card -->

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


    在这里特别要注意的是在Application或者第一个Activity进行初始化


  

    在此附上代码如下:

    public class MainActivity extends Activity {

    private GridView gv;
    private ImageLoader instance;
    private ImageLoaderConfiguration configuration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        // 创建配置信息
        instance = ImageLoader.getInstance();
        // 加载配置信息
        instance.init(configuration);
        // 加载配置
        // instance.init(ImageLoaderConfiguration.createDefault(this));
        gv.setAdapter(new MyAdapter(instance, this));
    }

    private void init() {
        gv = (GridView) findViewById(R.id.gv);

        // 图片缓存的全局配置(在网上加载)
        ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
        // 内存缓存图片的最大宽度
        builder.memoryCacheExtraOptions(480, 800);
        // 线程池
        builder.threadPoolSize(3);
        // 线程优先级
        builder.threadPriority(Thread.NORM_PRIORITY + 1);
        // 设置硬盘的图片的最大高度
        builder.diskCacheExtraOptions(480, 800, null);
        // 超过设定的缓存大小时,内存缓存清除机制
        builder.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024));
        // 超过设定的缓存大小时,磁盘缓存的清除机制
        File file = new File(Environment.getExternalStorageDirectory().getParent() + "/cache");
        builder.diskCache(new UnlimitedDiskCache(file));
        // 给文件命名,一般使用默认值(使用md5加密)
        builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        builder.defaultDisplayImageOptions(DisplayImageOptions.createSimple());

        DisplayImageOptions.Builder optionBuilder = new DisplayImageOptions.Builder();
        // 设置图片URI为空或是错误的时候显示的图片
        optionBuilder.showImageForEmptyUri(R.drawable.ic_launcher);
        // 设置图片在下载期间显示的图片
        optionBuilder.showImageOnLoading(R.drawable.ic_launcher);
        // 设置图片加载/解码过程中失败时候显示的图片
        optionBuilder.showImageOnFail(R.drawable.ic_launcher);
        // 设置下载的图片是否缓存在内存中
        optionBuilder.cacheInMemory(true);
        // 设置下载的图片是否缓存在SD卡中
        optionBuilder.cacheOnDisk(true);
        // 设置图片的圆弧
        optionBuilder.displayer(new RoundedBitmapDisplayer(25));
        // 将optionBuilder放到DisplayImageOptions中
        DisplayImageOptions options = optionBuilder.build();
        // 将DisplayImageOptions加载到configuration的builder容器中
        builder.defaultDisplayImageOptions(options);

        // 创造出配置类
        configuration = builder.build();
    }

    @Override
    protected void onDestroy() {
        if (instance != null) {
            instance.clearDiskCache();
            instance.clearMemoryCache();
        }
    }
}





    public class MyAdapter extends BaseAdapter {
    private ImageLoader imageloader;
    private Context context;

    //str为URL地址

    private String[] str;

    public MyAdapter(ImageLoader imageloader, Context context) {
        super();
        this.imageloader = imageloader;
        this.context = context;
        str = ImageAddress.imageThumbUrls;
    }

    public int getCount() {
        return str != null ? str.length : 0;
    }

    public Object getItem(int position) {
        return str[position];
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        holder ho;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.gvitem, null);
            ho = new holder();
            ho.iv = (ImageView) convertView.findViewById(R.id.iv);
            convertView.setTag(ho);
        }else{
            ho = (holder) convertView.getTag();
        }
        imageloader.displayImage(str[position], ho.iv);
        return convertView;
    }
    static class holder {
        ImageView iv;
    }
}



//设置圆形图片

ImageLoader instance = ImageLoader.getInstance();
instance.init(ImageLoaderConfiguration.createDefault(this));

DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new CircleBitmapDisplayer()).build();

instance.displayImage(“图片地址”, “控件”, options);


相关推荐
最新评论 (0)
返回
发表文章
ahaochina
文章数
120
评论数
0
注册排名
750244