前言 Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.(Github )
引入Glide依赖 app/build.gradle 1 2 3 4 5 6 dependencies { ... implementation 'com.github.bumptech.glide:glide:4.11.0' }
添加网络权限
在清单文件的<application></application>
之外添加网络权限
app/src/main/AndroidManifest.xml 1 <uses-permission android:name ="android.permission.INTERNET" />
使用Glide 在布局中添加图片控件 app/src/main/res/layout/activity_main.xml 1 2 3 4 <ImageView android:id ="@+id/iv" android:layout_width ="wrap_content" android:layout_height ="wrap_content" />
在Java中使用Glide渲染图片 直接渲染图片
<url>
:网络图片资源地址
app/src/main/java/.../MainActivity.java 1 2 3 4 ImageView imageView = findViewById(R.id.iv);Glide.with(this ) .load("<url>" ) .into(imageView);
使用占位符
可以同时配置多个占位符配置,也可以只配置一个占位符配置
.placeholder()
:正在请求图时展示的占位符图片.error()
:请求失败时展示的占位符图片,如果没有设置默认展示.placeholder()
配置的占位符图片.fallback()
:请求为空时展示的占位符图片,如果没有设置默认展示.placeholder()
配置的占位符图片.override(<width>, <height>)
:强制指定占位符图片宽高,单位px,如果没有指定则跟随ImageView的配置
.apply(requestOptions)
:应用配置
app/src/main/java/.../MainActivity.java 1 2 3 4 5 6 7 8 9 10 11 ImageView imageView = findViewById(R.id.iv);RequestOptions requestOptions = new RequestOptions () .placeholder(R.drawable.图片名) .error(R.drawable.图片名) .fallback(R.drawable.图片名); Glide.with(this ) .load("<url>" ) .apply(requestOptions) .into(imageView);
占位符的过渡动画
从占位符渲染为真正的图片时的过渡动画
Glide默认实现了交叉淡入效果,可以直接使用
使用默认的Drawable方式
.transition(DrawableTransitionOptions.withCrossFade(<time>))
:可以指定过渡动画的展示时间
app/src/main/java/.../MainActivity.java 1 2 3 4 5 6 7 8 9 10 ImageView imageView = findViewById(R.id.iv);RequestOptions requestOptions = new RequestOptions () .placeholder(R.drawable.图片名); Glide.with(this ) .load("<url>" ) .apply(requestOptions) .transition(DrawableTransitionOptions.withCrossFade(new DrawableCrossFadeFactory .Builder().setCrossFadeEnabled(true ).build())) .into(imageView);
.transition(BitmapTransitionOptions.withCrossFade(<time>))
:可以指定过渡动画的展示时间
app/src/main/java/.../MainActivity.java 1 2 3 4 5 6 7 8 9 10 11 ImageView imageView = findViewById(R.id.iv);RequestOptions requestOptions = new RequestOptions () .placeholder(R.drawable.图片名); Glide.with(this ) .asBitmap() .load("<url>" ) .apply(requestOptions) .transition(BitmapTransitionOptions.withCrossFade(new DrawableCrossFadeFactory .Builder().setCrossFadeEnabled(true ).build())) .into(imageView);
图形变换
圆形 app/src/main/java/.../MainActivity.java 1 2 3 4 Glide.with(this ) .load("https://s.cn.bing.net/th?id=OHR.TaihuCherry_ZH-CN9040685764_UHD.jpg" ) .transform(new CircleCrop ()) .into(imageView);
圆角
<reg>
:四个角的弧度值
app/src/main/java/.../MainActivity.java 1 2 3 4 Glide.with(this ) .load("https://s.cn.bing.net/th?id=OHR.TaihuCherry_ZH-CN9040685764_UHD.jpg" ) .transform(new RoundedCorners (<reg>)) .into(imageView);
<reg_left_top>
:左上角的弧度值<reg_right_top>
:右上角的弧度值<reg_right_bottom>
:右下角的弧度值<reg_left_bottom>
:左下角的弧度值
app/src/main/java/.../MainActivity.java 1 2 3 4 Glide.with(this ) .load("https://s.cn.bing.net/th?id=OHR.TaihuCherry_ZH-CN9040685764_UHD.jpg" ) .transform(new GranularRoundedCorners (<reg_left_top>, <reg_right_top>, <reg_right_bottom>, <reg_left_bottom>)) .into(imageView);
旋转
<reg>
:旋转的角度
app/src/main/java/.../MainActivity.java 1 2 3 4 Glide.with(this ) .load("https://s.cn.bing.net/th?id=OHR.TaihuCherry_ZH-CN9040685764_UHD.jpg" ) .transform(new Rotate (<reg>)) .into(imageView);
Glide扩展
Glide注解处理器的使用
在类上通过注解的方式,生成一个更加高效的Glide类
引入Glide注解处理器依赖 app/build.gradle 1 2 3 4 5 6 dependencies { ... annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' }
使用GlideApp类 创建配置类
创建一个MyGlideModule
类(类名自定义)作为配置类,继承自AppGlideModule
类,并在类上添加@Glidemodule
注解,用于生成GlideApp类
app/src/main/java/.../MyGlideModule.java 1 2 3 @GlideModule public class MyGlideModule extends AppGlideModule {}
创建配置类后重新编译项目即可完成GlideApp类的生成
使用GlideApp类添加占位符配置
使用GlideApp类,可以使用流式API添加占位符配置,而不需要创建RequestOptions
对象
1 2 3 4 GlideApp.with(this ) .load("<url>" ) .placeholder(R.drawable.图片名) .into(imageView);
使用频繁使用的选项集合进行配置 创建配置类
创建一个MyGlideExtension
类(类名自定义)作为配置类,并添加@GlideExtension
注解
必须创建一个私有无参构造
将频繁使用的配置提取为配置集,创建静态方法,返回配置集,并在方法上添加@GlideOption
注解
配置集方法名可以自定义
配置集方法可以指定多个
变换效果不能在配置集中配置
app/src/main/java/.../MyGlideExtension.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @GlideExtension public class MyGlideExtension { private MyGlideExtension () {} @GlideOption public static BaseRequestOptions<?> defaultOption(BaseRequestOptions<?> options) { return options .placeholder(R.drawable.图片名) .error(R.drawable.图片名) .fallback(R.drawable.图片名); } }
使用配置集
defaultOption()
:配置集方法名
app/src/main/java/.../MainActivity.java 1 2 3 GlideApp.with(this ) .load("<url>" ) .defaultOption();
完成 参考文献 哔哩哔哩——Android架构解析