图片加载的框架 Imageloader Picasso Glide

参考的网址: http://www.jianshu.com/p/3ac30878c72c                                                           总述

参考的网址: http://www.open-open.com/lib/view/open1455270373667.html                   picasso

参考的网址: http://blog.csdn.net/shangmingchao/article/details/51125554                      glide


Imageloader .一直很强大,使用很普遍,但是唯一缺陷,作者不维护了。不过依然好用,教程 网上巨多


picasso  Square出品  一句话搞定项目中的图片加载

       

             在Picasso当中,如果OKHttp可以使用的话,就会默认使用OKHttp,如果无法使用的话,就会使用UrlConnectionDownloader(默认使用HttpURLConnection实现)

  • 处理Adapter中的 ImageView 回收和取消已经回收ImageView的下载进程
  • 使用最少的内存完成复杂的图片转换,比如把下载的图片转换为圆角等
  • 自动添加磁盘和内存缓存


     使用方法:

     1.添加依赖

              

compile 'com.squareup.picasso:picasso:2.5.2'    

  2.使用方法

 /**
         * 根据ImageView大小,显示图片
         * .fit()                                  说明:控件不能设置成wrap_content,也就是必须有大小才行,fit()才让图片的宽高等于控件的宽高,设置fit(),不能再调用resize()
         * .placeholder(R.drawable.topic_tom)      说明:当图片没有加载上的时候,显示的图片
         * .error(R.drawable.topic_sky)            说明:当图片加载错误的时候,显示图片
         * .into(img_one)                          说明:将图片加载到哪个控件中
         */
        Picasso.with(this).load("http://g.hiphotos.baidu.com/image/pic/item/c9fcc3cec3fdfc03e426845ed03f8794a5c226fd.jpg")
                .fit()
                .placeholder(R.drawable.topic_tom)
                .error(R.drawable.topic_sky)
                .into(img_one);
        /**
         * 通过程序代码,来显示图片大小
         *.resize(200, 150)                        说明:为图片重新定义大小
         *.centerCrop()                            说明:图片要填充整个控件,去两边留中间
         */
        Picasso.with(this).load("http://d.hiphotos.baidu.com/image/h%3D200/sign=745574b6a2ec08fa390014a769ee3d4d/cb8065380cd79123148b447daf345982b2b78054.jpg")
                .resize(200, 150)
                .centerCrop()
                .placeholder(R.drawable.topic_tom)
                .error(R.drawable.topic_sky)
                .into(img_two);

        /**
         * 加载本地数据库,图片的大小,取消于控件设置的大小
         */
        Picasso.with(this).load(R.drawable.topic_tom)
                .into(img_three);


        /**
         * 截取图片
         * .transform(new CropSquareTransformation())        说明:通过程序截取图片
         */
        Picasso.with(this).load("http://g.hiphotos.baidu.com/image/pic/item/6c224f4a20a446230761b9b79c22720e0df3d7bf.jpg")
                .transform(new CropSquareTransformation())
                .placeholder(R.drawable.topic_tom)
                .error(R.drawable.topic_sky)
                .into(img_four);
她的内存缓存 如果不设置,就是原本的大小,实现三级缓存,实现加载中,加载后,加载失败(失败3次显示)图片,不用担心oom 不用担心list滑动出错



glide使用 ,她是对pissaio的封装拓展,包大了500k   更好的流畅性 

picasso不做设置就只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格 

  Glide 支持加载 Gif 动态图,而 Picasso 不支持该特性

gilde可以指定优先下载资源,下载后先展示缩略图等。

可以和指定的context周期一起

1.依赖

 compile 'com.github.bumptech.glide:glide:3.7.0'
2权限

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3Glide的网络请求部分可以使用当前最流行的网络请求框架Volley或OkHttp,也可以通过Glide的ModelLoader接口自己写网络请求。
Glide默认使用 HttpUrlConnection进行网络请求,为了让APP保持一致的网络请求形式,可以让Glide使用我们指定的网络请求形式请求网络资源,这里我们选 OkHttp (
 //OkHttp 2.x
    //compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
    //compile 'com.squareup.okhttp:okhttp:2.7.5'

    //OkHttp 3.x
    compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'

4.简单使用
Glide
    .with(this)
    .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
    .into(imageView);

  1. with(Context context). 使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制。
  2. with(Activity activity).使用Activity作为上下文,Glide的请求会受到Activity生命周期控制。
  3. with(FragmentActivity activity).Glide的请求会受到FragmentActivity生命周期控制。
  4. with(android.app.Fragment fragment).Glide的请求会受到Fragment 生命周期控制。
  5. with(android.support.v4.app.Fragment fragment).Glide的请求会受到Fragment生命周期控制。
Glide基本可以load任何可以拿到的媒体资源,如:
load SD卡资源:load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg")
load assets资源:load("file:///android_asset/f003.gif")
load raw资源:load("android.resource://com.frank.glide/raw/raw_1")或load("android.resource://com.frank.glide/raw/"+R.raw.raw_1)
load drawable资源:load("android.resource://com.frank.glide/drawable/news")或load("android.resource://com.frank.glide/drawable/"+R.drawable.news)
load ContentProvider资源:load("content://media/external/images/media/139469")
load http资源:load(" https://img-my.csdn.net/uploads/201508/05/1438760757_3588.jpg")
load https资源:load(" https://img.alicdn.com/tps/TB1uyhoMpXXXXcLXVXXXXXXXXXX-476-538.jpg_240x5000q50.jpg_.webp")

当然,load不限于String类型,还可以:
load(Uri uri)load(File file)load(Integer resourceId)load(URL url)load(byte[] model)load(T model)loadFromMediaStore(Uri uri)

  1. 禁止内存缓存:

     .skipMemoryCache(true)

  2. 清除内存缓存:

    // 必须在UI线程中调用
        Glide.get(context).clearMemory();

  3. 禁止磁盘缓存:

    .diskCacheStrategy(DiskCacheStrategy.NONE)

  4. 清除磁盘缓存:

    // 必须在后台线程中调用,建议同时clearMemory()
       Glide.get(applicationContext).clearDiskCache();

  1. 指定资源的优先加载顺序:

    //优先加载
        Glide
            .with(context)
            .load(heroImageUrl)
            .priority(Priority.HIGH)
            .into(imageViewHero);
        //后加载
        Glide
            .with(context)
            .load(itemImageUrl)
            .priority(Priority.LOW)
            .into(imageViewItem);

  2. 先显示缩略图,再显示原图:

    //用原图的1/10作为缩略图
        Glide
            .with(this)
            .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
            .thumbnail(0.1f)
            .into(iv_0);
        //用其它图片作为缩略图
        DrawableRequestBuilder<Integer> thumbnailRequest = Glide
            .with(this)
            .load(R.drawable.news);
        Glide.with(this)
            .load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
            .thumbnail(thumbnailRequest)
            .into(iv_0);

可以设置拦截器读取下载进度等等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值