
Gsy List Playback
RecyclerView / ViewPager2 / ViewPager 列表滑动自动播放,滚动切换、复用绑定、进入详情页时"漂移"到全屏。
Install
npx skills add CarGuo/GSYVideoPlayer --skill gsy-list-playback -g -a claude-code -y- Repository
- CarGuo/GSYVideoPlayer21.5k
- Category
- Engineering
- Updated
- 25d ago
- License
- Apache-2.0
- Context cost
- Lightabout 876 tokens
- Runs scripts
- No, instructions only
What it does
RecyclerView / ViewPager2 / ViewPager 列表滑动自动播放,滚动切换、复用绑定、进入详情页时"漂移"到全屏。
gsy-list-playback
三条实现路线
| 路线 | 特点 | 适用 |
|---|---|---|
A. 每 item 内嵌 StandardGSYVideoPlayer | 每条 item 有独立 player 实例,滑到即播 | 大多数场景(含无限缩略页面) |
B. ListVideoUtil 单例复用 | 全列表共享一个 player 实例,动态 attachToParent | 内存敏感、条目多;不能同屏两个视频 |
C. GSYVideoHelper 悬浮小窗 | 用于详情页返回列表时"漂浮"续播 | 抖音式详情返回 |
路线 A:每 item 一个 player
关键点:在 onBindViewHolder 里给每个 player setPlayPosition(position) + setPlayTag(String),防止滚动复用导致 URL 命中错人。
GSYVideoOptionBuilder:
滚动出屏自动释放:RecyclerView.OnScrollListener → 当前 firstVisible / lastVisible 之外的 holder 调 GSYVideoManager.releaseAllVideos()。
路线 B:ListVideoUtil(跨 item 复用一个 player)
工具类:ListVideoUtil。
| API | 说明 |
|---|---|
ListVideoUtil(Context) | 单例创建(在 Activity/Fragment 里持一份) |
addVideoPlayer(int position, ImageView thumb, String tag, ViewGroup container, View playBtn) | 把 player 移到 container;tag 与 position 用于识别是否是新目标 |
setPlayPositionAndTag(int, String) | 手动更新目标 |
startPlay(String url) | 开始播放 |
isCurrentViewPlaying(int pos, String tag) | 判定当前播放是否在这个 item |
releaseVideoPlayer() | 释放,通常在离开页面时调 |
自动可视区触发用 ScrollCalculatorHelper 的 onScrollReleaseAllVideos(...) / onScrollPlayVideo(...)。见 AutoPlayRecyclerViewActivity。
