GlideUtils.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package com.edufound.reader.util;
  2. import static com.bumptech.glide.load.DecodeFormat.PREFER_ARGB_8888;
  3. import static com.bumptech.glide.load.DecodeFormat.PREFER_RGB_565;
  4. import android.content.Context;
  5. import android.graphics.drawable.Drawable;
  6. import android.widget.ImageView;
  7. import com.bumptech.glide.Glide;
  8. import com.bumptech.glide.Priority;
  9. import com.bumptech.glide.load.DataSource;
  10. import com.bumptech.glide.load.MultiTransformation;
  11. import com.bumptech.glide.load.engine.DiskCacheStrategy;
  12. import com.bumptech.glide.load.engine.GlideException;
  13. import com.bumptech.glide.load.resource.bitmap.CenterCrop;
  14. import com.bumptech.glide.request.RequestListener;
  15. import com.bumptech.glide.request.RequestOptions;
  16. import com.bumptech.glide.request.target.Target;
  17. import com.edufound.reader.R;
  18. import java.io.File;
  19. import androidx.annotation.ColorInt;
  20. import io.reactivex.rxjava3.annotations.Nullable;
  21. import jp.wasabeef.glide.transformations.BlurTransformation;
  22. import jp.wasabeef.glide.transformations.CropCircleWithBorderTransformation;
  23. import jp.wasabeef.glide.transformations.GrayscaleTransformation;
  24. import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
  25. /**
  26. * Glide工具类
  27. */
  28. public class GlideUtils {
  29. /*** 占位图 */
  30. public static int placeholderImage = R.drawable.ic_default_image;
  31. /*** 错误图 */
  32. public static int errorImage = R.drawable.ic_default_image;
  33. /**
  34. * 加载图片(默认)
  35. *
  36. * @param context 上下文
  37. * @param url 链接
  38. * @param imageView ImageView
  39. */
  40. public static void loadImage(Context context, String url, ImageView imageView) {
  41. RequestOptions options = new RequestOptions()
  42. .placeholder(placeholderImage) //占位图
  43. .error(errorImage); //错误图
  44. Glide.with(context).load(url).apply(options).into(imageView);
  45. }
  46. /**
  47. * 加载图片(默认)
  48. *
  49. * @param context 上下文
  50. * @param resid 资源id
  51. * @param imageView ImageView
  52. */
  53. public static void loadImage(Context context, int resid, ImageView imageView) {
  54. RequestOptions options = new RequestOptions()
  55. .placeholder(placeholderImage) //占位图
  56. .error(errorImage); //错误图
  57. Glide.with(context).load(resid).apply(options).into(imageView);
  58. }
  59. /**
  60. * 指定图片大小;使用override()方法指定了一个图片的尺寸。
  61. * Glide现在只会将图片加载成width*height像素的尺寸,而不会管你的ImageView的大小是多少了。
  62. * 如果你想加载一张图片的原始尺寸的话,可以使用Target.SIZE_ORIGINAL关键字----override(Target.SIZE_ORIGINAL)
  63. *
  64. * @param context 上下文
  65. * @param url 链接
  66. * @param imageView ImageView
  67. * @param width 图片宽度
  68. * @param height 图片高度
  69. */
  70. public static void loadImageSize(Context context, String url, ImageView imageView, int width, int height) {
  71. RequestOptions options = new RequestOptions()
  72. .placeholder(placeholderImage) //占位图
  73. .error(errorImage) //错误图
  74. .override(width, height)
  75. .priority(Priority.HIGH);
  76. Glide.with(context).load(url).apply(options).into(imageView);
  77. }
  78. /**
  79. * 禁用内存缓存功能
  80. * diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收五种参数:
  81. * <p>
  82. * DiskCacheStrategy.NONE: 表示不缓存任何内容。
  83. * DiskCacheStrategy.DATA: 表示只缓存原始图片。
  84. * DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
  85. * DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
  86. * DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
  87. *
  88. * @param context 上下文
  89. * @param url 链接
  90. * @param imageView ImageView
  91. */
  92. public static void loadImageSizeKipMemoryCache(Context context, String url, ImageView imageView) {
  93. RequestOptions options = new RequestOptions()
  94. .placeholder(placeholderImage) //占位图
  95. .error(errorImage) //错误图
  96. .format(PREFER_RGB_565)
  97. .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);
  98. Glide.with(context).load(url).apply(options).into(imageView);
  99. }
  100. public static void loadImageSizeKipMemoryCache(Context context, int id, ImageView imageView) {
  101. RequestOptions options = new RequestOptions()
  102. .placeholder(placeholderImage) //占位图
  103. .error(errorImage) //错误图
  104. .format(PREFER_RGB_565)
  105. .skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC); //禁用掉Glide的内存缓存功能
  106. Glide.with(context).load(id).apply(options).into(imageView);
  107. }
  108. /**
  109. * 预先加载图片
  110. * 在使用图片之前,预先把图片加载到缓存,调用了预加载之后,我们以后想再去加载这张图片就会非常快了,
  111. * 因为Glide会直接从缓存当中去读取图片并显示出来
  112. *
  113. * @param context 上下文
  114. * @param url 链接
  115. */
  116. public static void preloadImage(Context context, String url) {
  117. Glide.with(context).load(url).preload();
  118. }
  119. /**
  120. * 加载圆形图片
  121. *
  122. * @param context 上下文
  123. * @param url 链接
  124. * @param imageView ImageView
  125. */
  126. public static void loadCircleImage(Context context, String url, ImageView imageView) {
  127. RequestOptions options = new RequestOptions()
  128. .centerCrop()
  129. .circleCrop()//设置圆形
  130. .placeholder(placeholderImage) //占位图
  131. .error(errorImage) //错误图
  132. .format(PREFER_RGB_565)
  133. .priority(Priority.HIGH);
  134. Glide.with(context).load(url).apply(options).into(imageView);
  135. }
  136. /**
  137. * 加载圆形图片
  138. *
  139. * @param context 上下文
  140. * @param resid 资源id
  141. * @param imageView ImageView
  142. */
  143. public static void loadCircleImage(Context context, int resid, ImageView imageView) {
  144. RequestOptions options = new RequestOptions()
  145. .centerCrop()
  146. .circleCrop()//设置圆形
  147. .placeholder(placeholderImage) //占位图
  148. .error(errorImage) //错误图
  149. .format(PREFER_RGB_565)
  150. .priority(Priority.HIGH);
  151. Glide.with(context).load(resid).apply(options).into(imageView);
  152. }
  153. /**
  154. * 加载圆形带边框图片
  155. *
  156. * @param context 上下文
  157. * @param url 链接
  158. * @param imageView ImageView
  159. * @param borderSize 边框宽度 px
  160. * @param borderColor 边框颜色
  161. */
  162. public static void loadCircleWithBorderImage(Context context, String url, ImageView imageView,
  163. float borderSize, @ColorInt int borderColor) {
  164. RequestOptions options = RequestOptions.bitmapTransform(
  165. new MultiTransformation<>(
  166. new CenterCrop(),
  167. new CropCircleWithBorderTransformation(SizeUtils.px2dp(context, borderSize), borderColor)
  168. ))
  169. .placeholder(placeholderImage) //占位图
  170. .format(PREFER_RGB_565)
  171. .error(errorImage); //错误图
  172. Glide.with(context).load(url).apply(options).into(imageView);
  173. }
  174. /**
  175. * 加载圆角图片
  176. *
  177. * @param context 上下文
  178. * @param url 链接
  179. * @param imageView ImageView
  180. * @param radius 圆角 px
  181. */
  182. public static void loadRoundCircleImage(Context context, String url, ImageView imageView,
  183. float radius) {
  184. RequestOptions options = RequestOptions.bitmapTransform(
  185. new MultiTransformation<>(
  186. new CenterCrop(),
  187. new RoundedCornersTransformation((int) radius, 0,
  188. RoundedCornersTransformation.CornerType.ALL)
  189. ))
  190. .placeholder(placeholderImage) //占位图
  191. .format(PREFER_RGB_565)
  192. .error(errorImage); //错误图
  193. Glide.with(context).load(url).apply(options).into(imageView);
  194. }
  195. /**
  196. * 加载圆角图片-指定任意部分圆角(图片上、下、左、右四个角度任意定义)
  197. *
  198. * @param context 上下文
  199. * @param url 链接
  200. * @param imageView ImageView
  201. * @param radius 圆角 px
  202. * @param type 圆角位置
  203. */
  204. public static void loadRoundCircleImage(Context context, String url, ImageView imageView,
  205. float radius, RoundedCornersTransformation.CornerType type) {
  206. RequestOptions options = RequestOptions.bitmapTransform(
  207. new MultiTransformation<>(
  208. new CenterCrop(),
  209. new RoundedCornersTransformation(SizeUtils.px2dp(context, radius), 0, type)
  210. ))
  211. .placeholder(placeholderImage) //占位图
  212. .format(PREFER_RGB_565)
  213. .error(errorImage); //错误图
  214. Glide.with(context).load(url).apply(options).into(imageView);
  215. }
  216. /**
  217. * 加载模糊图片(自定义透明度)
  218. *
  219. * @param context 上下文
  220. * @param url 链接
  221. * @param imageView ImageView
  222. * @param blur 模糊度,一般1-100够了,越大越模糊
  223. */
  224. public static void loadBlurImage(Context context, String url, ImageView imageView, int blur) {
  225. RequestOptions options = RequestOptions.bitmapTransform(
  226. new MultiTransformation<>(
  227. new CenterCrop(),
  228. new BlurTransformation(blur)
  229. ))
  230. .placeholder(placeholderImage) //占位图
  231. .format(PREFER_RGB_565)
  232. .error(errorImage); //错误图
  233. Glide.with(context).load(url).apply(options).into(imageView);
  234. }
  235. /**
  236. * 加载模糊图片(自定义透明度)
  237. *
  238. * @param context 上下文
  239. * @param url 链接
  240. * @param imageView ImageView
  241. * @param blur 模糊度,一般1-100够了,越大越模糊
  242. * @param sampling 取样
  243. */
  244. public static void loadBlurImage(Context context, String url, ImageView imageView, int blur, int sampling) {
  245. RequestOptions options = RequestOptions.bitmapTransform(
  246. new MultiTransformation<>(
  247. new CenterCrop(),
  248. new BlurTransformation(blur, sampling)
  249. ))
  250. .placeholder(placeholderImage) //占位图
  251. .format(PREFER_RGB_565)
  252. .error(errorImage); //错误图
  253. Glide.with(context).load(url).apply(options).into(imageView);
  254. }
  255. /**
  256. * 加载灰度(黑白)图片(自定义透明度)
  257. *
  258. * @param context 上下文
  259. * @param url 链接
  260. * @param imageView ImageView
  261. */
  262. public static void loadBlackImage(Context context, String url, ImageView imageView) {
  263. RequestOptions options = RequestOptions.bitmapTransform(
  264. new MultiTransformation<>(
  265. new CenterCrop(),
  266. new GrayscaleTransformation()
  267. ))
  268. .placeholder(placeholderImage) //占位图
  269. .format(PREFER_RGB_565)
  270. .error(errorImage); //错误图
  271. Glide.with(context).load(url).apply(options).into(imageView);
  272. }
  273. /**
  274. * Glide.with(this).asGif() //强制指定加载动态图片
  275. * 如果加载的图片不是gif,则asGif()会报错, 当然,asGif()不写也是可以正常加载的。
  276. * 加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。
  277. * 如果你传入的还是一张GIF图的话,Glide会展示这张GIF图的第一帧,而不会去播放它。
  278. *
  279. * @param context 上下文
  280. * @param url 链接
  281. * @param imageView ImageView
  282. */
  283. private void loadGif(Context context, String url, ImageView imageView) {
  284. RequestOptions options = new RequestOptions()
  285. .placeholder(placeholderImage) //占位图
  286. .error(errorImage); //错误图
  287. Glide.with(context)
  288. .load(url)
  289. .apply(options)
  290. .listener(new RequestListener<Drawable>() {
  291. @Override
  292. public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
  293. return false;
  294. }
  295. @Override
  296. public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
  297. return false;
  298. }
  299. })
  300. .into(imageView);
  301. }
  302. /**
  303. * 下载图片
  304. * 在RequestListener的onResourceReady方法里面获取下载File图片
  305. * new RequestListener<File>() {
  306. * *@Override
  307. * public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
  308. * return false;
  309. * }
  310. * <p>
  311. * *@Override
  312. * public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
  313. * //resource即为下载取得的图片File
  314. * return false;
  315. * }
  316. * }
  317. *
  318. * @param context 上下文
  319. * @param url 下载链接
  320. * @param requestListener 下载监听
  321. */
  322. public static void downloadImage(final Context context, final String url, RequestListener<File> requestListener) {
  323. Glide.with(context)
  324. .downloadOnly()
  325. .load(url)
  326. .addListener(requestListener).preload();
  327. }
  328. public static void removeAll(Context context) {
  329. Glide.get(context).clearDiskCache();
  330. }
  331. }