androidscrollviewandroid-recyclerviewandroid-videoviewautoplay

How to play video of video-view that is currently focus in recycler view


In my app there is a recycler-view having video-views, I want to auto-play the specific video view which is completely in focus when scrolled.


Solution

  • RecyclerView rv_featureList;
    private View currentFocusedLayout, oldFocusedLayout;
    
    @Override
    public void onCreate(Bundle instanceState) {
        rv_featuredList.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView,
                                             int newState) {
                super.onScrollStateChanged(recyclerView, newState);
    
    
                if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    //get the recyclerview position which is completely visible and first
                    int positionView = ((LinearLayoutManager) rv_featuredList.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
                    Log.i("VISISBLE", positionView + "");
                    if (positionView >= 0) {
                        if (oldFocusedLayout != null) {
                            //Stop the previous video playback after new scroll
                            VideoView vv_dashboard = (VideoView) oldFocusedLayout.findViewById(R.id.vv_dashboard);
                            vv_dashboard.stopPlayback();
                        }
    
    
                        currentFocusedLayout = ((LinearLayoutManager) rv_featuredList.getLayoutManager()).findViewByPosition(positionView);
                        VideoView vv_dashboard = (VideoView) currentFocusedLayout.findViewById(R.id.vv_dashboard);
                        //to play video of selected recylerview, videosData is an array-list which is send to recyclerview adapter to fill the view. Here we getting that specific video which is displayed through recyclerview.
                        playVideo(videosData.get(positionView));
                        oldFocusedLayout = currentFocusedLayout;
                    }
                }
    
            }
    
        });
    }