android - Exoplayer - 如何使 exoplayer 只播放当前可见的视频

标签 android video android-recyclerview exoplayer pagersnaphelper

我有一个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/

相关文章:

java - 在 strings.xml 中使用长值时,Lint 给出 "Wrong format type"

java - 从 ArrayList 生成定义的集合

android - popBackStack 后 TextWatcher 过滤器无法正常工作

android - 禁用横向模式是不可原谅的吗?

video - 在 H.264 block 中搭载额外数据

android - RecyclerView 不显示 Fragment 内的所有项目

android - 将视频从资源加载到 HTML5 webview - Android

c++ - 在 C++ 中使用 opencv 捕获实时视频?

android - SelectionTracker 未在我的 Recyclerview 中选择任何内容

android - Recyclerview 内的 Recyclerview 滚动不流畅