|
|
@@ -0,0 +1,233 @@
|
|
|
+package com.mgtech.base_library.util;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.graphics.Bitmap;
|
|
|
+import android.graphics.PointF;
|
|
|
+import android.graphics.drawable.Drawable;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.ImageView;
|
|
|
+
|
|
|
+import androidx.annotation.NonNull;
|
|
|
+import androidx.annotation.Nullable;
|
|
|
+import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
|
|
+import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
|
|
+
|
|
|
+import com.bumptech.glide.Glide;
|
|
|
+import com.bumptech.glide.request.RequestOptions;
|
|
|
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
|
|
|
+import com.bumptech.glide.request.target.ImageViewTarget;
|
|
|
+import com.luck.picture.lib.engine.ImageEngine;
|
|
|
+import com.luck.picture.lib.listener.OnImageCompleteCallback;
|
|
|
+import com.luck.picture.lib.tools.MediaUtils;
|
|
|
+import com.luck.picture.lib.widget.longimage.ImageSource;
|
|
|
+import com.luck.picture.lib.widget.longimage.ImageViewState;
|
|
|
+import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView;
|
|
|
+import com.mgtech.base_library.R;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author:luck
|
|
|
+ * @date:2019-11-13 17:02
|
|
|
+ * @describe:Glide加载引擎
|
|
|
+ */
|
|
|
+public class GlideEngine implements ImageEngine {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载图片
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param url
|
|
|
+ * @param imageView
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
|
|
|
+ Glide.with(context)
|
|
|
+ .load(url)
|
|
|
+ .into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载网络图片适配长图方案
|
|
|
+ * # 注意:此方法只有加载网络图片才会回调
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param url
|
|
|
+ * @param imageView
|
|
|
+ * @param longImageView
|
|
|
+ * @param callback 网络图片加载回调监听 {link after version 2.5.1 Please use the #OnImageCompleteCallback#}
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadImage(@NonNull Context context, @NonNull String url,
|
|
|
+ @NonNull ImageView imageView,
|
|
|
+ SubsamplingScaleImageView longImageView, OnImageCompleteCallback callback) {
|
|
|
+ Glide.with(context)
|
|
|
+ .asBitmap()
|
|
|
+ .load(url)
|
|
|
+ .into(new ImageViewTarget<Bitmap>(imageView) {
|
|
|
+ @Override
|
|
|
+ public void onLoadStarted(@Nullable Drawable placeholder) {
|
|
|
+ super.onLoadStarted(placeholder);
|
|
|
+ if (callback != null) {
|
|
|
+ callback.onShowLoading();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onLoadFailed(@Nullable Drawable errorDrawable) {
|
|
|
+ super.onLoadFailed(errorDrawable);
|
|
|
+ if (callback != null) {
|
|
|
+ callback.onHideLoading();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void setResource(@Nullable Bitmap resource) {
|
|
|
+ if (callback != null) {
|
|
|
+ callback.onHideLoading();
|
|
|
+ }
|
|
|
+ if (resource != null) {
|
|
|
+ boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
|
|
|
+ resource.getHeight());
|
|
|
+ longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
|
|
|
+ imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
|
|
|
+ if (eqLongImage) {
|
|
|
+ // 加载长图
|
|
|
+ longImageView.setQuickScaleEnabled(true);
|
|
|
+ longImageView.setZoomEnabled(true);
|
|
|
+ longImageView.setPanEnabled(true);
|
|
|
+ longImageView.setDoubleTapZoomDuration(100);
|
|
|
+ longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
|
|
|
+ longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
|
|
|
+ longImageView.setImage(ImageSource.bitmap(resource),
|
|
|
+ new ImageViewState(0, new PointF(0, 0), 0));
|
|
|
+ } else {
|
|
|
+ // 普通图片
|
|
|
+ imageView.setImageBitmap(resource);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载网络图片适配长图方案
|
|
|
+ * # 注意:此方法只有加载网络图片才会回调
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param url
|
|
|
+ * @param imageView
|
|
|
+ * @param longImageView
|
|
|
+ * @ 已废弃
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadImage(@NonNull Context context, @NonNull String url,
|
|
|
+ @NonNull ImageView imageView,
|
|
|
+ SubsamplingScaleImageView longImageView) {
|
|
|
+ Glide.with(context)
|
|
|
+ .asBitmap()
|
|
|
+ .load(url)
|
|
|
+ .into(new ImageViewTarget<Bitmap>(imageView) {
|
|
|
+ @Override
|
|
|
+ protected void setResource(@Nullable Bitmap resource) {
|
|
|
+ if (resource != null) {
|
|
|
+ boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(),
|
|
|
+ resource.getHeight());
|
|
|
+ longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE);
|
|
|
+ imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE);
|
|
|
+ if (eqLongImage) {
|
|
|
+ // 加载长图
|
|
|
+ longImageView.setQuickScaleEnabled(true);
|
|
|
+ longImageView.setZoomEnabled(true);
|
|
|
+ longImageView.setPanEnabled(true);
|
|
|
+ longImageView.setDoubleTapZoomDuration(100);
|
|
|
+ longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
|
|
|
+ longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
|
|
|
+ longImageView.setImage(ImageSource.bitmap(resource),
|
|
|
+ new ImageViewState(0, new PointF(0, 0), 0));
|
|
|
+ } else {
|
|
|
+ // 普通图片
|
|
|
+ imageView.setImageBitmap(resource);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载相册目录
|
|
|
+ *
|
|
|
+ * @param context 上下文
|
|
|
+ * @param url 图片路径
|
|
|
+ * @param imageView 承载图片ImageView
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadFolderImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
|
|
|
+ Glide.with(context)
|
|
|
+ .asBitmap()
|
|
|
+ .load(url)
|
|
|
+ .override(180, 180)
|
|
|
+ .centerCrop()
|
|
|
+ .sizeMultiplier(0.5f)
|
|
|
+ .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
|
|
|
+ .into(new BitmapImageViewTarget(imageView) {
|
|
|
+ @Override
|
|
|
+ protected void setResource(Bitmap resource) {
|
|
|
+ RoundedBitmapDrawable circularBitmapDrawable =
|
|
|
+ RoundedBitmapDrawableFactory.
|
|
|
+ create(context.getResources(), resource);
|
|
|
+ circularBitmapDrawable.setCornerRadius(8);
|
|
|
+ imageView.setImageDrawable(circularBitmapDrawable);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载gif
|
|
|
+ *
|
|
|
+ * @param context 上下文
|
|
|
+ * @param url 图片路径
|
|
|
+ * @param imageView 承载图片ImageView
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadAsGifImage(@NonNull Context context, @NonNull String url,
|
|
|
+ @NonNull ImageView imageView) {
|
|
|
+ Glide.with(context)
|
|
|
+ .asGif()
|
|
|
+ .load(url)
|
|
|
+ .into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载图片列表图片
|
|
|
+ *
|
|
|
+ * @param context 上下文
|
|
|
+ * @param url 图片路径
|
|
|
+ * @param imageView 承载图片ImageView
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
|
|
|
+ Glide.with(context)
|
|
|
+ .load(url)
|
|
|
+ .override(200, 200)
|
|
|
+ .centerCrop()
|
|
|
+ .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder))
|
|
|
+ .into(imageView);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private GlideEngine() {
|
|
|
+ }
|
|
|
+
|
|
|
+ private static GlideEngine instance;
|
|
|
+
|
|
|
+ public static GlideEngine createGlideEngine() {
|
|
|
+ if (null == instance) {
|
|
|
+ synchronized (GlideEngine.class) {
|
|
|
+ if (null == instance) {
|
|
|
+ instance = new GlideEngine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return instance;
|
|
|
+ }
|
|
|
+}
|