SlideVideoAdapter.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package com.edufound.reader.adapter;
  2. import android.app.Activity;
  3. import android.graphics.Rect;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.CompoundButton;
  8. import android.widget.Switch;
  9. import com.edufound.reader.R;
  10. import com.edufound.reader.bean.CommentListBean;
  11. import com.edufound.reader.bean.HttpResultBean;
  12. import com.edufound.reader.bean.HttpResultDataListBean;
  13. import com.edufound.reader.bean.UserRecordBean;
  14. import com.edufound.reader.cusview.AutoPollRecyclerView;
  15. import com.edufound.reader.cusview.RvListJzvdStd;
  16. import com.edufound.reader.util.Consts;
  17. import com.edufound.reader.util.GlideUtils;
  18. import com.edufound.reader.util.OkHttpClient;
  19. import com.edufound.reader.util.SizeUtils;
  20. import com.edufound.reader.videoutil.JZMediaIjk;
  21. import com.google.gson.reflect.TypeToken;
  22. import com.okhttplib.HttpInfo;
  23. import com.okhttplib.callback.Callback;
  24. import com.orhanobut.logger.Logger;
  25. import java.io.IOException;
  26. import java.util.List;
  27. import androidx.annotation.NonNull;
  28. import androidx.recyclerview.widget.LinearLayoutManager;
  29. import androidx.recyclerview.widget.RecyclerView;
  30. import cn.jzvd.JZDataSource;
  31. import cn.jzvd.JzvdStd;
  32. public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
  33. private LayoutInflater mLayoutInflater;
  34. private Activity mContext;
  35. private List<UserRecordBean> mListData;
  36. public SlideVideoAdapter(Activity context, @NonNull List<UserRecordBean> data) {
  37. mContext = context;
  38. mLayoutInflater = LayoutInflater.from(context);
  39. this.mListData = data;
  40. }
  41. public void addMored(List<UserRecordBean> listData) {
  42. mListData.addAll(listData);
  43. }
  44. @NonNull
  45. @Override
  46. public VideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  47. return new VideoHolder(mContext, mLayoutInflater.inflate(R.layout.adapter_item_slidevideo, parent, false));
  48. }
  49. @Override
  50. public void onBindViewHolder(@NonNull VideoHolder holder, int position) {
  51. // holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN);
  52. holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class);
  53. GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView);
  54. holder.initDanMu(mListData.get(position).getUserRead().getId());
  55. holder.mVideo.startPreloading();
  56. holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  57. @Override
  58. public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
  59. if (b) {
  60. holder.mMarqueen.setVisibility(View.VISIBLE);
  61. holder.mMarqueen.start();
  62. } else {
  63. holder.mMarqueen.setVisibility(View.INVISIBLE);
  64. holder.mMarqueen.stop();
  65. }
  66. }
  67. });
  68. // holder.mVideo.posterImageView.setImageURI(Uri.parse(mListData.get(position).videoUrl));
  69. }
  70. @Override
  71. public void onViewDetachedFromWindow(@NonNull VideoHolder holder) {
  72. super.onViewDetachedFromWindow(holder);
  73. holder.mSwitch.setChecked(false);
  74. }
  75. @Override
  76. public int getItemCount() {
  77. return mListData.size();
  78. }
  79. @Override
  80. public int getItemViewType(int position) {
  81. return position;
  82. }
  83. }
  84. class VideoHolder extends RecyclerView.ViewHolder {
  85. public View mItemView;
  86. public RvListJzvdStd mVideo;
  87. public AutoPollRecyclerView mMarqueen;
  88. public Switch mSwitch;
  89. public Activity mContext;
  90. public VideoHolder(Activity context, @NonNull View itemView) {
  91. super(itemView);
  92. mContext = context;
  93. mItemView = itemView;
  94. mVideo = itemView.findViewById((R.id.slidevideo_video));
  95. mMarqueen = itemView.findViewById(R.id.slidevideo_video_marqueen);
  96. mSwitch = itemView.findViewById(R.id.slidevideo_video_switch);
  97. mSwitch.setChecked(false);
  98. if (mSwitch.isChecked()) {
  99. mMarqueen.setVisibility(View.VISIBLE);
  100. mMarqueen.start();
  101. } else {
  102. mMarqueen.setVisibility(View.INVISIBLE);
  103. mMarqueen.stop();
  104. }
  105. }
  106. public void initDanMu(String exampleId) {
  107. OkHttpClient.doGetAsync(mContext, new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/posts/list").addParam("columnId", exampleId).addParam("pageNo", String.valueOf(1)).addParam("pageSize", "1000"), new Callback() {
  108. @Override
  109. public void onSuccess(HttpInfo info) throws IOException {
  110. HttpResultBean<HttpResultDataListBean<CommentListBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<CommentListBean>>>() {
  111. }.getType());
  112. SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList());
  113. mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
  114. mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 20)));
  115. mMarqueen.setAdapter(adapter);
  116. }
  117. @Override
  118. public void onFailure(HttpInfo info) throws IOException {
  119. Logger.e("获取弹幕失败:" + info.getRetDetail());
  120. }
  121. });
  122. }
  123. }
  124. class SpacesItemDecoration extends RecyclerView.ItemDecoration {
  125. private int space;
  126. public SpacesItemDecoration(int space) {
  127. this.space = space;
  128. }
  129. @Override
  130. public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
  131. outRect.left = space;
  132. outRect.right = space;
  133. // outRect.bottom = space;
  134. // Add top margin only for the first item to avoid double space between items
  135. }
  136. }