PictureSelector Coil 已完美支持

vx6bjr1n  于 2022-10-24  发布在  其他
关注(0)|答案(4)|浏览(229)

之前在一个已关闭的issue里面回答解决了coil支持的问题,由于里面聊天内容过多,不方便新来搜索coil的查找解决方案,现新开一个issue,用来说明一下:
我这边写了一个CoilEngine,经过测试已经支持大部分的Android版本(API 26~API 30),库地址: https://github.com/ijero/CoilPictureSelector

接入非常方便,根据首页说明,把app下的CoilEngine.kt源码拷贝到自己项目使用即可!

非常感谢作者提供 PictureSelector 这么好用的图片选择库!

g9icjywg

g9icjywg1#

我写的,借楼分享一波,相互借鉴

class CoilEngine private constructor() : ImageEngine {
    override fun loadImage(context: Context, url: String, imageView: ImageView) {
        imageView.load(url)
    }

    override fun loadImage(context: Context, url: String, imageView: ImageView, longImageView: SubsamplingScaleImageView?, callback: OnImageCompleteCallback?) {
        imageView.load(url) {
            target(
                onStart = {
                    callback?.onShowLoading()
                },
                onSuccess = {
                    callback?.onHideLoading()
                    it.run {
                        val eqLongImage = MediaUtils.isLongImg(it.intrinsicWidth, it.intrinsicHeight)
                        longImageView?.visibility = if (eqLongImage) View.VISIBLE else View.GONE
                        imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
                        if (eqLongImage) {
                            // 加载长图
                            longImageView?.apply {
                                isQuickScaleEnabled = true
                                isZoomEnabled = true
                                setDoubleTapZoomDuration(100)
                                setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
                                setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
                                setImage(ImageSource.bitmap(it.toBitmap()), ImageViewState(0F, PointF(0F, 0F), 0))
                            }
                        } else {
                            imageView.load(it)
                        }
                    }
                },
                onError = {
                    callback?.onHideLoading()

                }
            )
        }
    }

    override fun loadImage(context: Context, url: String, imageView: ImageView, longImageView: SubsamplingScaleImageView?) {
        imageView.load(url) {
            target(
                onStart = { },
                onSuccess = {
                    it.run {
                        val eqLongImage = MediaUtils.isLongImg(it.intrinsicWidth, it.intrinsicHeight)
                        longImageView?.visibility = if (eqLongImage) View.VISIBLE else View.GONE
                        imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
                        if (eqLongImage) {
                            // 加载长图
                            longImageView?.apply {
                                isQuickScaleEnabled = true
                                isZoomEnabled = true
                                setDoubleTapZoomDuration(100)
                                setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
                                setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
                                setImage(ImageSource.bitmap(it.toBitmap()), ImageViewState(0F, PointF(0F, 0F), 0))
                            }
                        } else {
                            imageView.load(it)
                        }
                    }
                },
                onError = { }
            )
        }
    }

    override fun loadFolderImage(context: Context, url: String, imageView: ImageView) {
        imageView.load(url) {
            size(180, 180)
            placeholder(R.drawable.picture_image_placeholder)
            RoundedCornersTransformation(8F.dp)
        }
    }

    override fun loadAsGifImage(context: Context, url: String, imageView: ImageView) {
        val imageLoader = ImageLoader.Builder(context).componentRegistry {
            if (SDK_INT >= 28) {
                add(ImageDecoderDecoder(context))
            } else {
                add(GifDecoder())
            }
        }.build()
        imageView.load(url, imageLoader)
    }

    override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
        imageView.load(url) {
            size(200, 200)
            placeholder(R.drawable.picture_image_placeholder)
            RoundedCornersTransformation(8F.dp)
        }
    }

    companion object {
        val instance: CoilEngine by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { CoilEngine() }
    }
}
nbysray5

nbysray52#

之前在一个已关闭的issue里面回答解决了coil支持的问题,由于里面聊天内容过多,不方便新来搜索coil的查找解决方案,现新开一个issue,用来说明一下:
我这边写了一个CoilEngine,经过测试已经支持大部分的Android版本(API 26~API 30),库地址: https://github.com/ijero/CoilPictureSelector

接入非常方便,根据首页说明,把app下的CoilEngine.kt源码拷贝到自己项目使用即可!

非常感谢作者提供 PictureSelector 这么好用的图片选择库!

视频地址无法加载封面是什么原因呢?

bvjveswy

bvjveswy3#

之前在一个已关闭的issue里面回答解决了coil支持的问题,由于里面聊天内容过多,不方便新来搜索coil的查找解决方案,现新开一个issue,用来说明一下:
我这边写了一个CoilEngine,经过测试已经支持大部分的Android版本(API 26~API 30),库地址: https://github.com/ijero/CoilPictureSelector
接入非常方便,根据首页说明,把app下的CoilEngine.kt源码拷贝到自己项目使用即可!
非常感谢作者提供 PictureSelector 这么好用的图片选择库!

视频地址无法加载封面是什么原因呢?

https://github.com/ijero/CoilPictureSelector
已经更新,支持视频缩略图

yruzcnhs

yruzcnhs4#

@ijero 大佬,PictureSelector v3.0.3 新版的能否适配一下呢?

相关问题