求助:如何在Android 12以下版本显示.avif格式图片?
在Android 12以下版本加载AVIF图片的解决方案
一、扩展Glide支持AVIF
Glide默认不支持AVIF格式,需通过第三方解码库扩展能力:
- 添加依赖:在Module级别的
build.gradle中引入相关库
dependencies { // Glide核心库 implementation 'com.github.bumptech.glide:glide:4.16.0' kapt 'com.github.bumptech.glide:compiler:4.16.0' // AVIF解码扩展插件 implementation 'com.github.penfeizhou.android.animation:glide-plugin-avif:2.4.0' }
- 注册解码器:自定义
AppGlideModule来注册AVIF解码组件
@GlideModule public class CustomGlideModule extends AppGlideModule { @Override public void registerComponents(Context context, Glide glide, Registry registry) { registry.prepend(InputStream.class, AvifDrawable.class, new AvifDecoder(glide.getBitmapPool())); } }
配置完成后,Glide即可在Android 9.0等低版本设备上正常加载AVIF图片。
二、使用独立AVIF解码库自行处理
若不想依赖图片加载框架,可直接用独立解码库实现:
- 引入依赖:
implementation 'com.github.penfeizhou.android.animation:avif:2.4.0'
- 解码示例(需在子线程执行,避免阻塞主线程):
// 获取AVIF文件输入流(网络或本地) InputStream inputStream = ...; AvifDecoder decoder = new AvifDecoder(); Drawable avifDrawable = decoder.decode(inputStream); // 切换到主线程设置图片 runOnUiThread(() -> imageView.setImageDrawable(avifDrawable));
三、Picasso的处理建议
Picasso目前无官方或主流的AVIF扩展支持,建议直接切换到上述配置后的Glide,或自行封装RequestHandler结合独立解码库来适配AVIF格式。
内容的提问来源于stack exchange,提问作者Dazai
相关产品推荐
相关产品推荐

