【问题标题】:Automatically playing videos in a RecyclerView like Instagram does像 Instagram 一样在 RecyclerView 中自动播放视频
【发布时间】:2018-09-04 15:36:53
【问题描述】:

我希望能够通过滚动回收站视图(如 instagram)来播放和暂停视频。 我已经在 stackoverflow 上看到了很多关于这个主题的问题,但我不知道如何在我的代码上实现这些解决方案。 所以我有一个 Recycler Adapter,我可以在其中从 firebase 获取所有用户信息并将其显示在我的应用程序上。

public class FeedRecyclerAdapter extends RecyclerView.Adapter<FeedRecyclerAdapter.ViewHolder> {

private List<Feed>feedList;
private FirebaseFirestore firebaseFirestore;
public Context context;

private FirebaseAuth firebaseAuth;

public FeedRecyclerAdapter(List<Feed> feedList){
    this.feedList = feedList;

}



@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.feed_row, parent, false);
    context = parent.getContext();
    firebaseFirestore = FirebaseFirestore.getInstance();
    firebaseAuth = FirebaseAuth.getInstance();
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

    holder.setIsRecyclable(false);

    final String feedPostId = feedList.get(position).FeedPostId;
    final String currentUserId = firebaseAuth.getCurrentUser().getUid();

    String desc_data = feedList.get(position).getDesc();
    holder.setDesc(desc_data);

    String video_url = feedList.get(position).getVideo_url();
    holder.setFeedVideo(video_url);








}

@Override
public int getItemCount() {
    return feedList.size();
}

public  class ViewHolder extends RecyclerView.ViewHolder{

    private TextView desc;
    private View mView;
    private VideoView videoView;
    private TextView username;





    public ViewHolder(View itemView) {
        super(itemView);
        mView=itemView;


    }
    public void setDesc(String descText){
        desc = mView.findViewById(R.id.post_desc);
        desc.setText(descText);
    }
    public void setFeedVideo(final String downloadUri){
        videoView = mView.findViewById(R.id.postVideo);
        videoView.setVideoPath(downloadUri);
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.setLooping(true);

            }
        });
        videoView.start();

}



}

【问题讨论】:

标签: android android-recyclerview android-videoview


【解决方案1】:

首先使用这个 ShapeHelper 设置您的 RecyclerView,如下所示

SnapHelper snapHelper = new PagerSnapHelper(); snapHelper.attachToRecyclerView(recyclerView);

然后在 LayoutManager 的帮助下获取 RecyclerView 可见的Position,如下所示

GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager());
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();

在这里用你的布局管理器更改 LayoutManger 我使用 GridLayoutManager。

更多参考这里是链接

  1. Scroll On item at a one time
  2. Get Visible Item position

【讨论】:

  • 您能否解释一下解决方案的第二部分,我们如何使用 firstVisiblePosition 在可见时播放视频并在不可见时暂停?这会很有帮助。
猜你喜欢
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多