当屏幕上显示某个百分比时,在recyclelerView中暂停视频

Jan*_*x72 10 android android-recyclerview

我想播放一个视频,当它在recyclerView适配器内部的屏幕上的视图为75%时.所以findFirstVisibleItem和所有那些在这里不起作用.(或者,如果他们这样做,我不知道他们将如何工作).

目前我正在等待视图在我能够暂停或播放视频之前被回收,但是从生成新视图的那一刻开始.任何人都可以帮助我,我已经研究了很长时间,并没有在哪里.

jDu*_*Dur 1

使用 RecyclerView.ItemDecoration。

ItemDecoration 在渲染回收器的内容时​​被多次调用,因此它不应该在这里做繁重的事情,但您可以使用它来通知视图的某些百分比何时可见。

ItemDecoration 有多种方法,但您需要实现的方法是:

public void onDrawOver(Canvas c, RecyclerView parent, State state);
Run Code Online (Sandbox Code Playgroud)

或者可能

public void onDraw(Canvas c, RecyclerView parent, State state);
Run Code Online (Sandbox Code Playgroud)

对于您所要求的情况,您不会注意到任何区别,但为了补充解释,当您的行在屏幕上呈现时调用第一个,以便您可以在它上进行绘制,而第二个在呈现行之前调用所以你可以在“下面”画一些东西。

对于这种情况,您不需要绘制任何内容,只需计算视图的大小即可。对于该任务,您需要获取渲染视图,并检测哪一个是带有视频的视图。

@Override
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {

int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
    View child = parent.getChildAt(i);
    int adapterPos = parent.getChildAdapterPosition(child);
    int viewType = parent.getAdapter().getItemViewType(adapterPos);
    ... Your code here ...
    // if(viewType == THE_EXPECTED_TYPE) {
    //     if(child.top() == parent.top()) {
    //         notifyViewIsVisibleAt100(); //100%; make your calcs to ensure your 75%
   //      }
   //  }
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要首先将 ItemDecoration 注册到 recyclerView 中。

recyclerView.addItemDecoration(theItemDecoration);
Run Code Online (Sandbox Code Playgroud)