Created
September 15, 2017 14:36
-
-
Save aaalaniz/b779b12d2887c32576ffa4d5828b88c1 to your computer and use it in GitHub Desktop.
VideoView used in RecyclerView
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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