You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现安卓Fragment间视频共享元素转场且不中断音视频播放

基于ExoPlayer的Fragment共享元素视频转场无中断实现方案

核心逻辑

普通静态内容共享元素转场仅过渡View绘制缓存,不适用于视频、GIF等动态内容,要实现全程播放无中断,核心逻辑是播放实例全局复用、仅切换渲染载体、配合系统共享元素动画完成过渡,YouTube TV端的实现也是基于该逻辑。

具体实现步骤

  • 全局持有唯一ExoPlayer实例,不要在Fragment A/B内部初始化播放器,切换Fragment时不会触发播放器的销毁、重建逻辑,音频输出会全程保持正常。
  • 给Fragment A中承载视频的View和Fragment B中承载视频的View设置相同的transitionName,跳转时将该View作为共享元素传入FragmentTransaction,系统会自动执行缩放、位移的过渡动画。
  • 转场触发前仅调用player.clearVideoSurface()将播放器与Fragment A的渲染Surface解绑,不要调用pause()/stop()/release()等控制播放状态的方法。
  • 给Fragment B设置共享元素转场完成监听,在动画结束回调中,将全局ExoPlayer重新绑定到Fragment B的渲染Surface上即可。

通用动态媒体适配

针对GIF、直播流等其他动态媒体场景,实现逻辑一致:仅将对应的渲染引擎(比如GIF加载框架的解码实例)做全局单例管理,转场过程中不销毁渲染实例,仅在转场完成后切换渲染承载的View即可。

避坑提示

不要给两个Fragment的共享元素View设置额外背景,否则转场过程中会出现黑边遮挡视频画面的问题。
TV端场景需要在转场过程中临时持有焦点锁,避免转场时焦点乱跑触发播放暂停的异常逻辑。

内容的提问来源于stack exchange,提问作者Felix ZY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:03