|
@@ -0,0 +1,197 @@
|
|
|
+package com.compdfkit.tools.utils.glide;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.graphics.Bitmap;
|
|
|
+import android.widget.ImageView;
|
|
|
+
|
|
|
+import androidx.annotation.Nullable;
|
|
|
+import androidx.fragment.app.Fragment;
|
|
|
+
|
|
|
+import com.bumptech.glide.load.DataSource;
|
|
|
+import com.bumptech.glide.load.DecodeFormat;
|
|
|
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
|
|
+import com.bumptech.glide.load.engine.GlideException;
|
|
|
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
|
|
+import com.bumptech.glide.request.RequestListener;
|
|
|
+import com.bumptech.glide.request.target.Target;
|
|
|
+import com.bumptech.glide.signature.ObjectKey;
|
|
|
+import com.compdfkit.tools.utils.glide.pdf.GlidePDFUrl;
|
|
|
+import com.compdfkit.tools.utils.threadpools.CThreadPoolUtils;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Glide图片加载工具类;有其他需求后期添加
|
|
|
+ */
|
|
|
+public class GlideLoadUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[c, url, target]
|
|
|
+ * @return : void
|
|
|
+ * @description :加载图片不需要缓存的
|
|
|
+ */
|
|
|
+ public static void loadSourceImgWithNoCache(Context c, String url, ImageView target) {
|
|
|
+ GlideApp.with(c)
|
|
|
+ .load(url)
|
|
|
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
|
|
|
+ .skipMemoryCache(true)
|
|
|
+ .centerCrop()
|
|
|
+ .transition(new DrawableTransitionOptions().crossFade(200))
|
|
|
+ .into(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void LoadGiftAsGistKeepFidelity(Context context, int url, ImageView imageView, int erroId) {
|
|
|
+ GlideApp.with(context)
|
|
|
+ .asGif()
|
|
|
+ .load(url)
|
|
|
+ .format(DecodeFormat.PREFER_ARGB_8888)
|
|
|
+ .error(erroId)
|
|
|
+ .into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[c, resourceId, target, defaultId]
|
|
|
+ * @return : void
|
|
|
+ * @description :根据资源ID加载图片
|
|
|
+ */
|
|
|
+ public static void loadResourseImg(Context c, int resourceId, ImageView target, int defaultId) {
|
|
|
+ GlideApp.with(c)
|
|
|
+ .load(resourceId)
|
|
|
+ .placeholder(defaultId)
|
|
|
+ .transition(new DrawableTransitionOptions().crossFade(200))
|
|
|
+ .centerCrop()
|
|
|
+ .into(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[c, imgFile, target, defaultId]
|
|
|
+ * @return : void
|
|
|
+ * @description :根据图片路径加载图片
|
|
|
+ */
|
|
|
+ public static void loadStampImg(Context c, String imgFilePath, ImageView target, int width, int height) {
|
|
|
+ GlideApp.with(c)
|
|
|
+ .load(imgFilePath)
|
|
|
+ .transition(new DrawableTransitionOptions().crossFade(200))
|
|
|
+ .centerCrop()
|
|
|
+ .skipMemoryCache(true)
|
|
|
+ .override(width, height)
|
|
|
+ .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
|
|
+ .into(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void loadPDFPageImage(Context c, GlidePDFUrl glidePDFUrl, String filePath, boolean diskCacheStrategy, boolean memoryCache, Target target) {
|
|
|
+ GlideApp.with(c)
|
|
|
+ .asBitmap()
|
|
|
+ .load(glidePDFUrl)
|
|
|
+ .signature(new ObjectKey(String.format("%s_%s_%s", filePath, glidePDFUrl.getPageIndex(), System.currentTimeMillis() - 10000)))
|
|
|
+ .diskCacheStrategy(diskCacheStrategy ? DiskCacheStrategy.DATA : DiskCacheStrategy.NONE)
|
|
|
+ .skipMemoryCache(!memoryCache)
|
|
|
+ .into(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void loadPDFPageImage(Context c, GlidePDFUrl glidePDFUrl, String filePath, boolean diskCacheStrategy, boolean memoryCache, ImageView imageView) {
|
|
|
+ GlideApp.with(c)
|
|
|
+ .asBitmap()
|
|
|
+ .load(glidePDFUrl)
|
|
|
+ .signature(new ObjectKey(String.format("%s_%s_%s", filePath, glidePDFUrl.getPageIndex(), System.currentTimeMillis() - 10000)))
|
|
|
+ .diskCacheStrategy(diskCacheStrategy ? DiskCacheStrategy.DATA : DiskCacheStrategy.NONE)
|
|
|
+ .skipMemoryCache(!memoryCache)
|
|
|
+ .into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context, url, imageView]
|
|
|
+ * @return : void
|
|
|
+ * @description :加载Gif为一张静态图片
|
|
|
+ */
|
|
|
+ public static void LoadGiftAsBitmap(Context context, String url, ImageView imageView) {
|
|
|
+ GlideApp.with(context).asBitmap().load(url).into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context, url, imageView, erroId]
|
|
|
+ * @return : void
|
|
|
+ * @description :你想只有加载对象是Gif时才能加载成功
|
|
|
+ */
|
|
|
+ public static void LoadGiftAsGist(Context context, String url, ImageView imageView, int erroId) {
|
|
|
+ GlideApp.with(context).asGif().load(url).error(erroId).into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[fragment, url, imageView]
|
|
|
+ * @return : void
|
|
|
+ * @description :加载缩略图,会自动与传入的fragment绑定生命周期,加载请求现在会自动在onStop中暂停在,onStart中重新开始。
|
|
|
+ * 需要保证 ScaleType 的设置是正确的。
|
|
|
+ */
|
|
|
+ public static void LoadThumbNail(Fragment fragment, String url, ImageView imageView) {
|
|
|
+ GlideApp.with(fragment).load(url).thumbnail(0.1f).into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context, url, target, placeholder_resId, error_resId]
|
|
|
+ * @return : void
|
|
|
+ * @description :加载圆形头像;如果是activity glide会与其生命周期关联,在onStop()中取消加载图片,如果
|
|
|
+ * 想要始终加载图片则需要传入Application实例
|
|
|
+ */
|
|
|
+ public static void loadRoundImg(Context context, String url, ImageView target, int placeholder_resId, int error_resId) {
|
|
|
+ //https://github.com/wasabeef/glide-transformations--glide转换库
|
|
|
+ GlideApp.with(context)
|
|
|
+ .load(url)
|
|
|
+ .placeholder(placeholder_resId)
|
|
|
+ .error(error_resId)
|
|
|
+ .circleCrop()//直接在链式中调用就行哦
|
|
|
+ .transition(new DrawableTransitionOptions().crossFade(1000))//渐显效果
|
|
|
+ .into(target);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context, url]
|
|
|
+ * @return : android.graphics.Bitmap
|
|
|
+ * @description :下载图片,耗时操作不能放在主线程中进行
|
|
|
+ */
|
|
|
+ public static Bitmap downLoadImage(Context context, String url) {
|
|
|
+ try {
|
|
|
+ return GlideApp.with(context).asBitmap().load(url).centerCrop().listener(new RequestListener<Bitmap>() {
|
|
|
+ @Override
|
|
|
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }).submit().get();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context]
|
|
|
+ * @return : void
|
|
|
+ * @description :清除缓存
|
|
|
+ */
|
|
|
+ public static void clearCache(final Context context) {
|
|
|
+ clearMemoryCache(context);
|
|
|
+ CThreadPoolUtils.getInstance().execute(() -> clearDiskCache(context));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context]
|
|
|
+ * @return : void
|
|
|
+ * @description :清除内存缓存
|
|
|
+ */
|
|
|
+ public static void clearMemoryCache(Context context) {
|
|
|
+ GlideApp.get(context).clearMemory();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :[context]
|
|
|
+ * @return : void
|
|
|
+ * @description :清除磁盘缓存
|
|
|
+ */
|
|
|
+ public static void clearDiskCache(Context context) {
|
|
|
+ GlideApp.get(context).clearDiskCache();
|
|
|
+ }
|
|
|
+}
|