安卓图片加载汇总(Glide、Picasso)

一、Glide注意问题
Glide在项目开发中是我们经常用到的图片加载框架,他加载图片平滑,速度快,使用方法简单,可以设置缓存;但是在使用过程中仍然会有许多需要我们注意的点,以下都是我在开发中遇到的问题总结:

1、Glide加载背景变绿
Glide在加载满屏图片的时候背景被图片全部填充,但是Glide在加载纯净图片时,背景会变绿,这也是在项目中偶然遇到的问题,那么如何解决呢,原来Glide早就提供了相应的方法来处理这个问题,方法如下:
Glide.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageview);

2、Glide缓存
Glide加载默认有缓存,当我们需要频繁的给ImageView添加背景的时候,如果不添加设置,第二次设置的图片通常不能把第一次的图片覆盖,这就是 因为Glide加载默认缓存的问题;

/**
 * Glide加载图片默认跳过内存缓存
 */
    public static void loadImageSkipMemory(Context context, String url, ImageView view, int err) {
        Glide.with(context).load(url).error(err).skipMemoryCache(true).into(view);
    }
/**
 * Glide加载图片去除磁盘缓存
 */
    public static void loadImageDiskMemory(Context context, String url, ImageView view, int err) {
     Glide.with(context).load(url).error(err).diskCacheStrategy(DiskCacheStrategy.NONE).into(view);
    }
//Glide添加全尺寸缓存
Glide.with(this)  
     .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")  
     .diskCacheStrategy(DiskCacheStrategy.ALL)  
     .into(ivImgGlide);
/**
 * Glide加载图片清除磁盘缓存
 */
    public static void clearImageDiskMemory(Context context) {
        Glide.get(context).clearDiskCache();
    }
/**
 * Glide加载图片清除内存缓存
 */
    public static void clearImageSkipMemory(Context context) {
        Glide.get(context).clearMemory();
    }

Glide加载图片的缓存策略

策略解说:
all:缓存源资源和转换后的资源
none:不作任何磁盘缓存
source:缓存源资源
result:缓存转换后的资源
3、Glide加载图片的优势

(1) Glide加载图片的with();方法,可以传Context 和Activity,Fragment,推荐用Activity或者Fragment,这样在图片加载的时候是和Activity或Fragment的生命周期相绑定的,在onResume();方法调用的时候可以自动加载,在onPasue();方法调用的时候停止加载;

(2) Glide加载图片默认是加载RGB_565 而Picasso加载图片是默认加载ARGB8888,RGB_565比ARGB8888图片占用的内存小,所以在加载速度上Glide远高于Picasso;

(3)Glide默认有添加内存缓存,所以可以减轻服务器压力,减少网络请求次数,Glide缓存默认缓存当前ImageView控件大小相同的图片,而Picasso是缓存全尺寸的图片;

(4)Glide加载图片load();方法既可以加载本地图片又可以加载网络图片,可加载的类型有:
load(Uri uri),load(File file),load(Integer resourceId),load(URL url),load(byte[] model), load(T model),loadFromMediaStore(Uri uri)。
当然Picasso也可以设置图片加载的大小

Picasso.with(this)  
    .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")  
    .resize(768, 432)  
    .into(ivImgPicasso);  

4、Glide加载动画

Glide不仅可以加载静态图片而且可以加载GIF动画,不设置asGif 只要图片URL是动画,那么就会自动加载,但是如果设置了asGif那么URL就必须是动画资源,不然会报错具体的方法:

/**
 * Glide加载GIF动画图
 */
    public static void loadGif(Context context, String url, ImageView view, int err) {
        Glide.with(context).load(url).asGif().error(err).skipMemoryCache(true).into(view);
    }

Glide加载动画默认是循环播放的,那么如何控制加载动画的次数呢,我们可以通过GlideDrawableImageViewTarget来控制动画加载的次数,参数二就是;

Glide.with(this).load(url).into(new GlideDrawableImageViewTarget(iv, 1));

Glide加载Animation动画

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

5、Glide加载失败
Glide加载图片提供了两种占位图,一种是加载中,一种是加载失败;

Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

6、Glide加载缩略图

 Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

7、Glide加载动态转换图

 Glide.with(context).load(url).asGif().error(err).centerCrop().skipMemoryCache(true).into(view);

8、Glide 加载添加监听
好处:设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘

 Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                //imageView.setImageDrawable(resource);
                return false;
            }
        }).into(imageView);

二、Picasso加载图片
Picasso加载图片默认加载ARGB8888的图片,像素高,适合加载查看详细图片的方式;

Picasso.with(this)  
    .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")    
    .into(ivImgPicasso);  

Picasso提供了两种占位的方式:

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)//加载中
    .error(R.drawable.user_placeholder_error)//加载失败
    .into(imageView);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值