SlideVideoAdapter.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.edufound.reader.adapter;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.graphics.Color;
  5. import android.graphics.Rect;
  6. import android.graphics.drawable.GradientDrawable;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.CompoundButton;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.Switch;
  14. import android.widget.TextView;
  15. import com.edufound.reader.R;
  16. import com.edufound.reader.activity.WebActivity;
  17. import com.edufound.reader.bean.ChannelCodeEnum;
  18. import com.edufound.reader.bean.CommentListBean;
  19. import com.edufound.reader.bean.HttpResultBean;
  20. import com.edufound.reader.bean.HttpResultDataListBean;
  21. import com.edufound.reader.bean.UserRecordBean;
  22. import com.edufound.reader.cusview.AutoPollRecyclerView;
  23. import com.edufound.reader.cusview.RvListJzvdStd;
  24. import com.edufound.reader.util.Consts;
  25. import com.edufound.reader.util.EfunboxUtil;
  26. import com.edufound.reader.util.GlideUtils;
  27. import com.edufound.reader.util.OkHttpClient;
  28. import com.edufound.reader.util.ShapeCreator;
  29. import com.edufound.reader.util.SizeUtils;
  30. import com.edufound.reader.videoutil.JZMediaIjk;
  31. import com.google.gson.reflect.TypeToken;
  32. import com.okhttplib.HttpInfo;
  33. import com.okhttplib.callback.Callback;
  34. import com.orhanobut.logger.Logger;
  35. import java.io.IOException;
  36. import java.util.List;
  37. import androidx.annotation.NonNull;
  38. import androidx.recyclerview.widget.LinearLayoutManager;
  39. import androidx.recyclerview.widget.RecyclerView;
  40. import cn.jzvd.JZDataSource;
  41. import cn.jzvd.Jzvd;
  42. import cn.jzvd.JzvdStd;
  43. public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
  44. private LayoutInflater mLayoutInflater;
  45. private Activity mContext;
  46. private List<UserRecordBean> mListData;
  47. public SlideVideoAdapter(Activity context, @NonNull List<UserRecordBean> data) {
  48. mContext = context;
  49. mLayoutInflater = LayoutInflater.from(context);
  50. this.mListData = data;
  51. }
  52. public void addMored(List<UserRecordBean> listData) {
  53. mListData.addAll(listData);
  54. }
  55. public String getItemType(int position) {
  56. return mListData.get(position).getUserRead().getType();
  57. }
  58. @NonNull
  59. @Override
  60. public VideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  61. return new VideoHolder(mContext, mLayoutInflater.inflate(R.layout.adapter_item_slidevideo, parent, false));
  62. }
  63. @Override
  64. public void onBindViewHolder(@NonNull VideoHolder holder, int position) {
  65. // holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN);
  66. holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mListData.get(position).getUserRead().getId());
  67. if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  68. GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView);
  69. }
  70. holder.mVideo.startPreloading();
  71. /**
  72. * type=READ(用户朗读的)
  73. * type=EXAMPLE(官方的)
  74. * */
  75. holder.mItemView.setTag(mListData.get(position).getUserRead().getType());
  76. holder.itemView.setTag(mListData.get(position).getUserRead().getType());
  77. if (mListData.get(position).getUserRead().getType().equals("READ") || mListData.get(position).getUserRead().getType().equals("EXAMPLE")) {
  78. // AAA代替EXAMPLE
  79. holder.initDanMu(mListData.get(position).getUserRead().getId());
  80. holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  81. @Override
  82. public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
  83. if (b) {
  84. holder.mMarqueen.setVisibility(View.VISIBLE);
  85. holder.mMarqueen.start();
  86. } else {
  87. holder.mMarqueen.setVisibility(View.INVISIBLE);
  88. holder.mMarqueen.stop();
  89. }
  90. }
  91. });
  92. } else if (mListData.get(position).getUserRead().getType().equals("AA")) {
  93. //这里修改成新的type。就可以使用了
  94. holder.mSwitch.setVisibility(View.INVISIBLE);
  95. holder.mEventBtn.setVisibility(View.VISIBLE);
  96. holder.mEventBtn.setOnClickListener(new View.OnClickListener() {
  97. @Override
  98. public void onClick(View v) {
  99. EfunboxUtil.toWebFlowerActivity(mContext);
  100. }
  101. });
  102. TextView textView = new TextView(mContext);
  103. textView.setLayoutParams(new LinearLayout.LayoutParams(SizeUtils.dp2px(mContext, 200), LinearLayout.LayoutParams.MATCH_PARENT));
  104. //左上圆角
  105. holder.mTagLayout.removeAllViews();
  106. ShapeCreator.create()
  107. .setCornerRadiusLT(50)
  108. .setCornerRadiusRB(50)
  109. .setSolidColor(mContext.getResources().getColor(R.color.grassgreen))
  110. .into(textView);
  111. holder.mTagLayout.addView(textView);
  112. holder.mTagLayout.setVisibility(View.VISIBLE);
  113. } else {
  114. }
  115. // holder.mVideo.posterImageView.setImageURI(Uri.parse(mListData.get(position).videoUrl));
  116. }
  117. @Override
  118. public void onViewDetachedFromWindow(@NonNull VideoHolder holder) {
  119. super.onViewDetachedFromWindow(holder);
  120. // holder.mSwitch.setChecked(false);
  121. }
  122. @Override
  123. public int getItemCount() {
  124. return mListData.size();
  125. }
  126. @Override
  127. public int getItemViewType(int position) {
  128. return position;
  129. }
  130. }
  131. class VideoHolder extends RecyclerView.ViewHolder {
  132. public View mItemView;
  133. public RvListJzvdStd mVideo;
  134. public AutoPollRecyclerView mMarqueen;
  135. public Switch mSwitch;
  136. public ImageView mEventBtn;
  137. public LinearLayout mTagLayout;
  138. public Activity mContext;
  139. public VideoHolder(Activity context, @NonNull View itemView) {
  140. super(itemView);
  141. mContext = context;
  142. mItemView = itemView;
  143. mVideo = itemView.findViewById((R.id.slidevideo_video));
  144. mSwitch = itemView.findViewById(R.id.slidevideo_video_switch);
  145. mEventBtn = itemView.findViewById(R.id.adapter_item_slidevideo_event_btn);
  146. mTagLayout = itemView.findViewById(R.id.adapter_item_slidevideo_tagLayout);
  147. mTagLayout.setVisibility(View.GONE);
  148. mEventBtn.setVisibility(View.GONE);
  149. mSwitch.setVisibility(View.INVISIBLE);
  150. // if (!Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
  151. mMarqueen = itemView.findViewById(R.id.slidevideo_video_marqueen);
  152. mSwitch.setChecked(false);
  153. if (mSwitch.isChecked()) {
  154. mMarqueen.setVisibility(View.VISIBLE);
  155. mMarqueen.start();
  156. } else {
  157. mMarqueen.setVisibility(View.INVISIBLE);
  158. mMarqueen.stop();
  159. }
  160. // }
  161. }
  162. public void initDanMu(String exampleId) {
  163. OkHttpClient.doGetAsync(mContext, new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/posts/list").addParam("columnId", exampleId).addParam("pageNo", String.valueOf(1)).addParam("pageSize", "1000"), new Callback() {
  164. @Override
  165. public void onSuccess(HttpInfo info) throws IOException {
  166. HttpResultBean<HttpResultDataListBean<CommentListBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<CommentListBean>>>() {
  167. }.getType());
  168. if (bean.getData().getList() == null || bean.getData().getList().size() == 0) {
  169. Logger.e("没有弹幕");
  170. mSwitch.setVisibility(View.INVISIBLE);
  171. return;
  172. }
  173. mSwitch.setVisibility(View.VISIBLE);
  174. SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList());
  175. mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
  176. mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 23)));
  177. mMarqueen.setAdapter(adapter);
  178. }
  179. @Override
  180. public void onFailure(HttpInfo info) throws IOException {
  181. Logger.e("获取弹幕失败:" + info.getRetDetail());
  182. }
  183. });
  184. }
  185. }
  186. class SpacesItemDecoration extends RecyclerView.ItemDecoration {
  187. private int space;
  188. public SpacesItemDecoration(int space) {
  189. this.space = space;
  190. }
  191. @Override
  192. public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
  193. outRect.left = space;
  194. outRect.right = space;
  195. // outRect.bottom = space;
  196. // Add top margin only for the first item to avoid double space between items
  197. }
  198. }