Skip to content
Discussion options

You must be logged in to vote

解决方案
使用 预加载容器 + setVisible 控制 的方式实现多文件切换。

做法

  1. 创建空的 PAGComposition 容器,将所有待播放的 PAGFile 添加进去
  2. 通过 setVisible 控制当前显示哪个文件
  3. 切换时隐藏当前文件、显示目标文件,重置播放进度,必要时更新 duration

为什么这样做
直接调用 setComposition 切换文件时,每次都需要重新初始化渲染环境、构建图形缓存、上传 GPU 纹理,这些操作相对耗时,在频繁切换场景下会造成明显卡顿。

将多个文件预先添加到同一个容器中,首次渲染时所有文件的资源就已经完成初始化和缓存构建。后续切换只是修改 visible 属性,不涉及任何重新加载或缓存重建,切换几乎是瞬时的。

这是典型的空间换时间策略,适合文件数量有限且对切换流畅度要求高的场景。

时长不一致的处理
当容器中多个 PAGFile 时长不同时,容器的 duration 会自动取所有子图层的最大时长。这会导致一个问题:播放进度是按容器 duration 计算的,如果当前显示的文件时长较短,动画播完后会有一段空白等待时间。

切换文件时需要做以下处理:

  1. 先暂停播放
  2. 隐藏当前文件,显示目标文件
  3. 将播放进度设为 0,让目标文件从头开始
  4. 将 animator 的 duration 设置为目标文件的实际时长,确保播放周期与目标文件匹配
  5. 恢复播放

这样每次切换后,播放器都按当前文件的实际时长进行播放,避免时长差异带来的问题。

Replies: 2 comments 8 replies

Comment options

You must be logged in to vote
8 replies
@fecloud
Comment options

@fecloud
Comment options

@kevingpqi123
Comment options

@fecloud
Comment options

@fecloud
Comment options

Answer selected by kevingpqi123
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants