我有一个RecyclerView
。每个项目
都是一个视频。该item
将填满整个屏幕。因此一次只能看到一个item
。当我滚动时,下一个item
将可见。滚动将停止在下一个项目
处。我使用 PagerSnapHelper
实现了这一点。现在,当我设置 player.playWhenReady = true
时,下一个视频(在屏幕中不可见)也会播放。这不应该发生。所以我设置了player.playWhenReady = false
。现在我的需要是,当我滚动到下一个项目时,视频应该自动播放。也就是说,仅应播放屏幕中可见的视频。当我滚动时,当前视频应暂停并播放下一个视频。
最佳答案
使用 Facebook 模型,即在屏幕上完整显示一个视频一次,以及当前视频之前和之后的一半。我们获取完全可见的项目的位置并将其设置为播放,其余全部设置为暂停。
将滚动检测器设置为回收器 View
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int last = ((LinearLayoutManager)
mRecyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
for (int i = 0; i < list.size(); i++) {
if (i != last)
if(list.get(i).getPlayer()!=null)
list.get(i).getPlayer().setPlayWhenReady(false);
else
if(list.get(i).getPlayer()!=null)
list.get(i).getPlayer().setPlayWhenReady(true);
}
}
});
关于android - Exoplayer - 如何使 exoplayer 只播放当前可见的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60323830/