123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package com.xuqm.base.common
- 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.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.xuqm.base.R
- import org.jetbrains.annotations.NotNull
- class GlideEngine private constructor() : ImageEngine {
- /**
- * 加载图片
- *
- * @param context
- * @param url
- * @param imageView
- */
- override fun loadImage(
- @NotNull context: Context,
- @NotNull url: String,
- @NotNull 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 fun loadImage(
- @NotNull context: Context, @NotNull url: String,
- @NotNull imageView: ImageView,
- longImageView: SubsamplingScaleImageView, callback: OnImageCompleteCallback
- ) {
- Glide.with(context)
- .asBitmap()
- .load(url)
- .into(object : ImageViewTarget<Bitmap?>(imageView) {
- override fun onLoadStarted(@NonNull placeholder: Drawable?) {
- super.onLoadStarted(placeholder)
- callback.onShowLoading()
- }
- override fun onLoadFailed(@NonNull errorDrawable: Drawable?) {
- super.onLoadFailed(errorDrawable)
- callback.onHideLoading()
- }
- override fun setResource(@NonNull resource: Bitmap?) {
- callback.onHideLoading()
- if (resource != null) {
- val eqLongImage: Boolean = MediaUtils.isLongImg(
- resource.width,
- resource.height
- )
- longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE
- imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
- if (eqLongImage) {
- // 加载长图
- longImageView.isQuickScaleEnabled = true
- longImageView.isZoomEnabled = true
- longImageView.isPanEnabled = true
- longImageView.setDoubleTapZoomDuration(100)
- longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
- longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
- longImageView.setImage(
- ImageSource.bitmap(resource),
- ImageViewState(0f, PointF(0f, 0f), 0)
- )
- } else {
- // 普通图片
- imageView.setImageBitmap(resource)
- }
- }
- }
- })
- }
- /**
- * 加载网络图片适配长图方案
- * # 注意:此方法只有加载网络图片才会回调
- *
- * @param context
- * @param url
- * @param imageView
- * @param longImageView
- * @ 已废弃
- */
- override fun loadImage(
- @NotNull context: Context, @NotNull url: String,
- @NotNull imageView: ImageView,
- longImageView: SubsamplingScaleImageView
- ) {
- Glide.with(context)
- .asBitmap()
- .load(url)
- .into(object : ImageViewTarget<Bitmap?>(imageView) {
- override fun setResource(@NonNull resource: Bitmap?) {
- if (resource != null) {
- val eqLongImage: Boolean = MediaUtils.isLongImg(
- resource.width,
- resource.height
- )
- longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE
- imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
- if (eqLongImage) {
- // 加载长图
- longImageView.isQuickScaleEnabled = true
- longImageView.isZoomEnabled = true
- longImageView.isPanEnabled = true
- longImageView.setDoubleTapZoomDuration(100)
- longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
- longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
- longImageView.setImage(
- ImageSource.bitmap(resource),
- ImageViewState(0f, PointF(0f, 0f), 0)
- )
- } else {
- // 普通图片
- imageView.setImageBitmap(resource)
- }
- }
- }
- })
- }
- /**
- * 加载相册目录
- *
- * @param context 上下文
- * @param url 图片路径
- * @param imageView 承载图片ImageView
- */
- override fun loadFolderImage(
- @NotNull context: Context,
- @NotNull url: String,
- @NotNull imageView: ImageView
- ) {
- Glide.with(context)
- .asBitmap()
- .load(url)
- .override(180, 180)
- .centerCrop()
- .sizeMultiplier(0.5f)
- .apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder))
- .into(object : BitmapImageViewTarget(imageView) {
- override fun setResource(resource: Bitmap?) {
- val circularBitmapDrawable: RoundedBitmapDrawable =
- RoundedBitmapDrawableFactory.create(context.resources, resource)
- circularBitmapDrawable.cornerRadius = 8f
- imageView.setImageDrawable(circularBitmapDrawable)
- }
- })
- }
- /**
- * 加载gif
- *
- * @param context 上下文
- * @param url 图片路径
- * @param imageView 承载图片ImageView
- */
- override fun loadAsGifImage(
- @NotNull context: Context, @NotNull url: String,
- @NotNull imageView: ImageView
- ) {
- Glide.with(context)
- .asGif()
- .load(url)
- .into(imageView)
- }
- /**
- * 加载图片列表图片
- *
- * @param context 上下文
- * @param url 图片路径
- * @param imageView 承载图片ImageView
- */
- override fun loadGridImage(
- @NotNull context: Context,
- @NotNull url: String,
- @NotNull imageView: ImageView
- ) {
- Glide.with(context)
- .load(url)
- .override(200, 200)
- .centerCrop()
- .apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder))
- .into(imageView)
- }
- companion object {
- private var instance: GlideEngine? = null
- fun createGlideEngine(): GlideEngine? {
- if (null == instance) {
- synchronized(GlideEngine::class.java) {
- if (null == instance) {
- instance = GlideEngine()
- }
- }
- }
- return instance
- }
- }
- }
|