在浏览了所有Glide文档和StackOverflow问题和答案之后,我找不到有关在版本4中为单个Glide调用应用资源解码器的任何信息.
在版本Glide 3中,我们可以这样做:
Glide.with(imagePreview.context)
.load(mediaItem.path)
.asBitmap()
.decoder(decoderWithDownSampleAtMost(imagePreview.context))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(false)
.dontAnimate()
.into(target)
Run Code Online (Sandbox Code Playgroud)
private fun decoderWithDownSampleAtMost(ctx: Context): GifBitmapWrapperResourceDecoder {
return GifBitmapWrapperResourceDecoder(
ImageVideoBitmapDecoder(StreamBitmapDecoder(Downsampler.AT_MOST,
Glide.get(ctx).bitmapPool,
DecodeFormat.DEFAULT),
FileDescriptorBitmapDecoder(ctx)),
GifResourceDecoder(ctx),
Glide.get(ctx).bitmapPool)
}
Run Code Online (Sandbox Code Playgroud)
在版本4中,我知道我们可以AppGlideModule用于自定义ResourceDecoder
@GlideModule
class MyAppGlideModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
registry.prepend(String::class.java, Bitmap::class.java, GalleryDecoder(context))
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这适用于所有Glide调用.我怎样才能ResourceDecoder表现得像v3:在个人通话中应用的能力?
更新:
我可以在Glide Github Issues这里咨询后为我们提供一个解决方案https://github.com/bumptech/glide/issues/3522
所以基本上,我需要创建一个自定义Option并使用它来确定我的自定义是否ResourceDecoder会被触发.这是我的样本:
AppGlideModule@GlideModule
class MyAppGlideModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: …Run Code Online (Sandbox Code Playgroud)