您的位置:首页 > 其它

ImageLoder的使用方法

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

     下载地址:

      https://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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: