Android图片加载之Glide使用

来源:互联网 发布:男女合唱网络流行歌曲 编辑:程序博客网 时间:2024/05/08 14:10

Android图片加载之Glide使用


图片加载库常用的有UIL,Picasso,Volley ImageLoader,Fresco以及Glide

Glide具有获取、解码和展示视频剧照、图片、动画等功能,应用在几乎任何网络协议栈中,创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。


一、先回顾一下java实现:

URL url = new URL(String类型的字符串);    //将String类型的字符串转换为URL格式             holder.UserImage.setImageBitmap(BitmapFactory.decodeStream(url.openStream()));

二、 Glide使用:

1 添加依赖:

compile 'com.github.bumptech.glide:glide:3.7.0'

2 设置绑定生命周期

Glide.with(Context context);// 绑定Context  Glide.with(Activity activity);// 绑定Activity  Glide.with(FragmentActivity activity);// 绑定FragmentActivity  Glide.with(Fragment fragment);// 绑定Fragment

3 简单的加载图片

//设置绑定生命周期为this的,地址为imageUrl,加载到imageView这个控件中 (不是XML的,而是java连接的XML的组件)Glide.with(this).load(imageUrl).into(imageView);

4 设置加载中图片

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

5 设置加载失败图片

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

6 设置跳过内存缓存

Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

7.1 设置缓存策略

Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

策略解说:

all:缓存源资源和转换后的资源

none:不作任何磁盘缓存

source:缓存源资源

result:缓存转换后的资源

7.2缓存的动态清理

 Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行 Glide.get(this).clearMemory();//清理内存缓存  可以在UI主线程中进行

8 设置下载优先级

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

9设置加载动画

测试:该动画效果是啥

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

R.anim.item_alpha_in文件

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <alpha        android:duration="500"        android:fromAlpha="0.0"        android:toAlpha="1.0"/></set>

10 设置加载尺寸
测试:是将图片放大缩小还是只加载图片的一部分 放大了的话他的失真情况

 Glide.with(this).load(imageUrl).override(800, 800).into(imageView);

11 先加载缩略图 然后在加载全图
测试: 0.1 f 是啥

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

12 设置动态转换

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分。ImageView 会被完全填充,但图像可能不会完整显示

也可以通过自定义Transformation去设置自定义的


13 设置动态GIF加载方式

Glide.with(this).load(imageUrl).asBitmap().into(imageView);//显示gif静态图片Glide.with(this).load(imageUrl).asGif().into(imageView);//显示gif动态图片

14 设置要加载的内容
先下载图片然后再做一些合成的功能,比如项目中出现的图文混排,该如何实现目标下
测试:效果是啥

 Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget<GlideDrawable>() {            @Override            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {                imageView.setImageDrawable(resource);            }        });

15 设置监听请求接口
设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘

 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);

RecyclerView中使用:
原本是:

        new Thread(new Runnable() {            @Override            public void run() {                try {                    URL url = new URL(String类型的url);                    Log.i("url", String.valueOf(url));                    holder.UserImage.setImageBitmap(BitmapFactory.decodeStream(url.openStream()));                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();

现在是将上方的holder.UserImage…改成:

 Glide.with(mContext).load(url).into(holder.UserImage);

Databinding+ImageView+Glide中使用:

Databinding+ImageView参考博客:
http://blog.csdn.net/weixin_37577039/article/details/78514643
的第15点

加上glide使用:
在 setImageUrl(ImageView imageView, URL url) 中
将URL url 改成 String url 因为load()的url参数为String类型的

Glide.with(imageView.getContext()).load(url).placeholder(placeHolder).into(imageView);

这个值的获取是XML中使用app:imageUrl的组件去调用这个setImageUrl方法 传入这个组件 再传入get到的url 作为参数,Glide再通过这个参数获取值,所以不需要findID 也实现了url的加载 达到了Databinding的思想实现

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信密码忘了申诉不了怎么办 微信密码忘了申诉不回来怎么办 微信号密码忘了申诉失败怎么办 手机微信密码忘了无需申诉怎么办 安全守护2手机绑定密码错误怎么办 新办的手机号注册过魅族账号怎么办 百度网盘手机找回被别人关了怎么办 把朋友微信号弄没了怎么办 小米顶配版手机无线网速度慢怎么办 刺激战场用过模拟器后用手机怎么办 百度网盘分享文件有违禁内容怎么办 百度网盘好友发的分享不存在怎么办 4g手机的下载速度很慢怎么办 为什么打开百度网盘的速度慢怎么办 百度网盘限制了我的宽带速度怎么办 联通信号很好但网速特别慢怎么办 苹果手机版本低下载不了软件怎么办 国内的手机要上推特和油管要怎么办 推特注册了卡在手机号怎么办 腾讯微信登录的账号密码忘了怎么办 打开手机浏览器自动跳到网页怎么办 游戏包解压后找不到启动的怎么办? 每次都要解压一次才能运行怎么办 误冲了王者荣耀点劵怎么办 机顶盒上开通的vip手机上怎么办 王者荣耀以前玩的区找不到了怎么办 电脑分辨率调高了游戏进不去怎么办 键盘语言更改后进不去系统怎么办 高尔夫旅行款 被锁在车内怎么办 在天猫买东西垫付的运费不退怎么办 天猫店一口价定价定低了怎么办 服务器开机账号改了密码忘了怎么办 小米儿童电话手表开不开机怎么办? 上海拍牌超过5次违章怎么办 拍拍贷不能更新还不了款怎么办 起诉网贷平台不知道地址怎么办 网贷不知道在哪个平台借的怎么办 车过户后出现问题车主不承认怎么办 卖了车买家一直不过户怎么办 我的车卖了但是买家不过户怎么办 如果买家拍了赠品但联系不上怎么办