Android如何展示动画WebP?ARCore引导页需显示AR Stickers APK动效文件
解决ARCore应用中展示动画WebP的问题
嘿,我之前也碰到过类似的情况,AR Stickers里的WebP动画用原生Movie类确实搞不定——这个API太老旧了,只支持非常有限的WebP动画格式。给你两个简单靠谱的方案,亲测有效:
方案一:用Facebook Fresco库(最稳定)
Fresco对WebP动画的支持相当完善,不管是带透明通道还是复杂帧动画都能轻松处理,步骤也很清晰:
- 先在Module级别的
build.gradle里添加依赖:
implementation 'com.facebook.fresco:fresco:2.6.0'
- 在你的Application类里初始化Fresco(如果没有Application类,就新建一个并在Manifest里注册):
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
- 布局里用
SimpleDraweeView替代普通的ImageView:
<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/ar_guide_webp" android:layout_width="wrap_content" android:layout_height="wrap_content" fresco:placeholderImage="@drawable/guide_placeholder" />
- 加载动画WebP的代码(假设文件放在assets目录下):
Uri webpUri = Uri.parse("file:///android_asset/your_ar_sticker.webp"); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(webpUri) .setAutoPlayAnimations(true) // 开启自动播放 .build(); SimpleDraweeView draweeView = findViewById(R.id.ar_guide_webp); draweeView.setController(controller);
设置完运行起来就能看到流畅的WebP动画了,Fresco会自动处理解码、缓存和渲染,完全不用你操心细节。
方案二:用Glide库(更轻量,适合已有Glide的项目)
如果你的项目已经在用Glide,那直接用它加载WebP动画更方便,Glide 4.x版本开始原生支持WebP动画:
- 确保添加了Glide依赖(如果还没加的话):
implementation 'com.github.bumptech.glide:glide:4.15.1'
- 直接用Glide加载即可,比如文件放在
res/raw目录下:
Glide.with(this) .load(R.raw.your_ar_sticker) .into(yourImageView);
Glide会自动识别这是动画WebP并自动播放,效果和Fresco一样,而且库体积更小,适合不想引入大库的场景。
为什么Movie类不行?
Android的Movie是个非常老旧的API,主要为早期的GIF和简单WebP动画设计,AR Stickers里的WebP动画大概率用了更新的编码规范(比如带透明通道、帧间压缩优化等),这些都是Movie类无法解析的,放弃这个思路就好啦。
内容的提问来源于stack exchange,提问作者TheHebrewHammer
相关产品推荐
相关产品推荐

