Skip to content

Instantly share code, notes, and snippets.

@Lzyct
Created February 18, 2017 05:10
Show Gist options
  • Select an option

  • Save Lzyct/8932d1068618cbac8b1a2e5074db55ba to your computer and use it in GitHub Desktop.

Select an option

Save Lzyct/8932d1068618cbac8b1a2e5074db55ba to your computer and use it in GitHub Desktop.
AutoPlay Exoplayer
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
LinearLayoutManager layout = (LinearLayoutManager) recyclerView.getLayoutManager();
int currentPosition = layout.findFirstVisibleItemPosition() - 1;
try {
Logger.d("currentPosition : " + currentPosition + "temp : " + previousPosition);
if (responseItemList.get(currentPosition).getFile().get(0).getAttachment_type().toLowerCase()
.equals("vid") && !responseItemList.isEmpty()) {
//clear previous player
if (previousPosition < currentPosition) {
adapterCarytaFeed.stopPlayer(previousPosition);
}
adapterCarytaFeed.playVideo(currentPosition, responseItemList.get(currentPosition).getFile().get(0).getUrl_link(), getActivity(), widthFrame);
previousPosition = currentPosition;
Logger.d("currentPosition 1 : " + currentPosition + "temp 1 : " + previousPosition);
}
} catch (Exception e) {
e.printStackTrace();
}
}
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
}
});
private List<ExoPlayerView> exoPlayerViews = new ArrayList<>();
public void playVideo(final int position, String videoURI, Context mContext, int widthFrame) {
if (tempUri.equals("")) {
tempUri = videoURI;
}
try {
// cek apakah url yang sama klo ia player tidak akan memuat ulang
Logger.d("adapter position : " + position);
if (!tempUri.equals(videoURI) || !isFirst)
if (exoPlayerViews.size() > position) {
tempUri = videoURI;
isFirst = true;
//clear state
for (int i = 0; i < exoPlayerViews.size(); i++) {
exoPlayerViews.get(i).reset();
}
PlayerControllerAutoPlay playerControllerAutoPlay = new PlayerControllerAutoPlay(mContext);
exoPlayerViews.get(position).getLayoutParams().height = widthFrame;
exoPlayerViews.get(position).initControl(playerControllerAutoPlay);
exoPlayerViews.get(position).setScaleType(ScaleType.NONE);
exoPlayerViews.get(position).setPreviewImage(responseItems.get(position).getFile().get(0).getThumbnail_link());
exoPlayerViews.get(position).setMeasureBasedOnAspectRatioEnabled(true);
exoPlayerViews.get(position).setVideoURI(Uri.parse(videoURI));
exoPlayerViews.get(position).showControls();
exoPlayerViews.get(position).setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion() {
exoPlayerViews.get(position).restart();
}
});
exoPlayerViews.get(position).setPlayWhenReady(true);
exoPlayerViews.get(position).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopPlayer(int tempPostion) {
try {
Logger.d("previous video : " + tempPostion);
if (exoPlayerViews.get(tempPostion).isPlaying())
exoPlayerViews.get(tempPostion).stopPlayback();
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyHolder extends RecyclerView.ViewHolder {
@BindView(R.id.exo_player_view)
ExoPlayerView exoPlayerView;
private Context mContext;
public MyHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
mContext = itemView.getContext();
exoPlayerViews.add(exoPlayerView);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment