你好!

配置权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

导入依赖

  //图片选择
  implementation 'io.github.lucksiege:pictureselector:v2.7.3-rc08'
  //图片载入
  implementation 'com.github.bumptech.glide:glide:4.12.0'

选择图片

private fun checkPic() {
	//maxSelectNum()选择图片的数量
    PictureSelector.create(this)
      .openGallery(PictureMimeType.ofImage())
      .imageEngine(GlideEngine.createGlideEngine())
      .maxSelectNum(1)
      .forResult(PictureConfig.CHOOSE_REQUEST);
  }

然后会在onActivityResult()中有回调

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (resultCode == RESULT_OK) {
      when (requestCode) {
        PictureConfig.CHOOSE_REQUEST -> {
          var result = PictureSelector.obtainMultipleResult(data) as ArrayList<LocalMedia>
          if (result.size <= 0) {
            return
          }
          Glide.with(this).load(result[0].path).into(ciImag)

          Log.e(
            "cxx",
            "result:"+
            result.size.toString()+
            "--mUpdateUserMsgImgHeadCir:"+
            result[0].path
          )
        }
      }
    }
  }

GlideEngine.java

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.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.script.androiddemoapplication.R;


public class GlideEngine implements ImageEngine {

  /**
   * 加载图片
   *
   * @param context
   * @param url
   * @param imageView
   */
  @Override
  public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    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) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    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.setDoubleTapZoomDuration(100);
              longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
              longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
              longImageView.setImage(ImageSource.cachedBitmap(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) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    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.setDoubleTapZoomDuration(100);
              longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP);
              longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
              longImageView.setImage(ImageSource.cachedBitmap(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) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    Glide.with(context)
      .asBitmap()
      .load(url)
      .override(180, 180)
      .centerCrop()
      .sizeMultiplier(0.5f)
      .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) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    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) {
    if (!ImageLoaderUtils.assertValidRequest(context)) {
      return;
    }
    Glide.with(context)
      .load(url)
      .override(200, 200)
      .centerCrop()
      .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;
  }
}

ImageLoaderUtils.java

import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;


public class ImageLoaderUtils {

  public static boolean assertValidRequest(Context context) {
    if (context instanceof Activity) {
      Activity activity = (Activity) context;
      return !isDestroy(activity);
    } else if (context instanceof ContextWrapper){
      ContextWrapper contextWrapper = (ContextWrapper) context;
      if (contextWrapper.getBaseContext() instanceof Activity){
        Activity activity = (Activity) contextWrapper.getBaseContext();
        return !isDestroy(activity);
      }
    }
    return true;
  }

  private static boolean isDestroy(Activity activity) {
    if (activity == null) {
      return true;
    }
    return activity.isFinishing() || activity.isDestroyed();
  }

}

动态权限篇

https://blog.csdn.net/chaseDreamer_/article/details/121077531

我是入梦,谢谢你的观看我的博客,觉着好用的话,麻烦帮忙点个赞呗,谢谢啦~ 如果有什么错误,请随时联系我噢~QQ:897589417

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐