Skip to content

Instantly share code, notes, and snippets.

@aaalaniz
Created September 15, 2017 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aaalaniz/b779b12d2887c32576ffa4d5828b88c1 to your computer and use it in GitHub Desktop.
Save aaalaniz/b779b12d2887c32576ffa4d5828b88c1 to your computer and use it in GitHub Desktop.
VideoView used in RecyclerView
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.twilio.video.LocalVideoTrack;
import com.twilio.video.VideoScaleType;
import com.twilio.video.test.R;
import com.twilio.video.VideoView;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
* RecyclerView adapter that renders local video tracks to a VideoView and TextView.
*/
public class VideoViewRecyclerViewAdapter extends
RecyclerView.Adapter<VideoViewRecyclerViewAdapter.VideoViewHolder> {
private static final String TAG = "VideoViewRecAdapter";
private final List<LocalVideoTrack> localVideoTracks;
private final Map<VideoViewHolder, LocalVideoTrack> viewHolderMap = new HashMap<>();
public VideoViewRecyclerViewAdapter(@NonNull List<LocalVideoTrack> localVideoTracks) {
this.localVideoTracks = localVideoTracks;
}
@Override
public void onViewAttachedToWindow(VideoViewHolder holder) {
Log.d(TAG, "onViewAttachedToWindow");
super.onViewAttachedToWindow(holder);
}
@Override
public void onViewDetachedFromWindow(VideoViewHolder holder) {
Log.d(TAG, "onViewDetachedFromWindow");
super.onViewDetachedFromWindow(holder);
}
@Override
public void onViewRecycled(VideoViewHolder holder) {
Log.d(TAG, "onViewRecycled");
super.onViewRecycled(holder);
}
@Override
public VideoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder");
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.video_view_item, null);
return new VideoViewHolder(view);
}
@Override
public void onBindViewHolder(VideoViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder");
LocalVideoTrack localVideoTrack = localVideoTracks.get(position);
// Remove renderer from previous video track
if (viewHolderMap.containsKey(holder)) {
viewHolderMap.get(holder).removeRenderer(holder.frameCountProxyRendererListener);
}
// Update view holder
holder.trackIdTextView.setText(localVideoTrack.getTrackId());
holder.frameCountProxyRendererListener.videoView
.setVideoScaleType(VideoScaleType.ASPECT_FILL);
localVideoTrack.addRenderer(holder.frameCountProxyRendererListener);
viewHolderMap.put(holder, localVideoTrack);
}
@Override
public int getItemCount() {
Log.d(TAG, "getItemCount");
return localVideoTracks.size();
}
/*
* View holder that hosts the video view proxy and a text view
*/
public class VideoViewHolder extends RecyclerView.ViewHolder {
public final TextView trackIdTextView;
public final FrameCountProxyRendererListener frameCountProxyRendererListener;
VideoViewHolder(View itemView) {
super(itemView);
this.frameCountProxyRendererListener =
new FrameCountProxyRendererListener((VideoView) itemView
.findViewById(R.id.video_view));
this.trackIdTextView = (TextView) itemView.findViewById(R.id.track_id_text_view);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment