Android应用中如何在UI组件显示.avif文件?需依赖三方库吗?
在Android 12+中用ImageView显示AVIF文件的正确姿势
Android 12(API 31)及以上确实原生支持AVIF格式,但直接按普通图片的方式加载容易踩坑,以下是具体解决方法:
1. 资源存放位置别搞错
别把AVIF文件扔res/drawable目录,Android构建工具不认这个目录下的AVIF,会直接编译报错。正确路径是res/raw或者assets目录。
如果用res/raw存放,代码里这么加载:
// Kotlin示例 val inputStream = resources.openRawResource(R.raw.your_avif_file) val bitmap = BitmapFactory.decodeStream(inputStream) imageView.setImageBitmap(bitmap)
2. 别在XML里直接引用
布局XML里别写android:src="@drawable/xxx.avif",资源编译阶段就会挂掉,必须用代码动态加载。
3. 用ImageDecoder替代BitmapFactory(更稳)
原生BitmapFactory对部分特殊编码的AVIF可能解码失败,换成Android 9+就支持的ImageDecoder更靠谱:
val source = ImageDecoder.createSource(resources, R.raw.your_avif_file) val bitmap = ImageDecoder.decodeBitmap(source) imageView.setImageBitmap(bitmap)
4. 要不要用第三方库?
如果你的App只适配Android 12+,原生方案完全够用,没必要加第三方库。但如果要兼容更低版本,或者遇到原生API搞不定的AVIF文件,可以用Coil、Glide这类图片加载库——它们都已经支持AVIF解码了。
内容的提问来源于stack exchange,提问作者DroidCrafter
相关产品推荐
相关产品推荐

