123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- package com.edufound.reader.adapter;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Rect;
- import android.os.Build;
- import android.os.Message;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.CompoundButton;
- import android.widget.FrameLayout;
- import android.widget.HorizontalScrollView;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.Switch;
- import android.widget.TextView;
- import com.edufound.reader.R;
- import com.edufound.reader.bean.ChannelCodeEnum;
- import com.edufound.reader.bean.CommentListBean;
- import com.edufound.reader.bean.HttpResultBean;
- import com.edufound.reader.bean.HttpResultDataListBean;
- import com.edufound.reader.bean.UserRecordBean;
- import com.edufound.reader.cusview.RvListJzvdStd;
- import com.edufound.reader.util.Consts;
- import com.edufound.reader.util.EfunboxUtil;
- import com.edufound.reader.util.GlideUtils;
- import com.edufound.reader.util.OkHttpClient;
- import com.edufound.reader.util.SizeUtils;
- import com.edufound.reader.videoutil.JZMediaIjk;
- import com.google.gson.reflect.TypeToken;
- import com.okhttplib.HttpInfo;
- import com.okhttplib.callback.Callback;
- import com.orhanobut.logger.Logger;
- import java.io.IOException;
- import java.util.List;
- import androidx.annotation.NonNull;
- import androidx.annotation.RequiresApi;
- import androidx.recyclerview.widget.RecyclerView;
- import cn.jzvd.JZDataSource;
- import cn.jzvd.JzvdStd;
- public class SlideVideoAdapter extends RecyclerView.Adapter<VideoHolder> {
- private LayoutInflater mLayoutInflater;
- private Activity mContext;
- private List<UserRecordBean> mListData;
- public SlideVideoAdapter(Activity context, @NonNull List<UserRecordBean> data) {
- mContext = context;
- mLayoutInflater = LayoutInflater.from(context);
- this.mListData = data;
- }
- public void addMored(List<UserRecordBean> listData) {
- mListData.addAll(listData);
- }
- public String getItemTag(int position) {
- return mListData.get(position).getUserRead().getTag();
- }
- @NonNull
- @Override
- public VideoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- return new VideoHolder(mContext, mLayoutInflater.inflate(R.layout.adapter_item_slidevideo, parent, false));
- }
- @Override
- public void onBindViewHolder(@NonNull VideoHolder holder, @SuppressLint("RecyclerView") int position) {
- // holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN);
- holder.mVideo.setUp(new JZDataSource(mListData.get(position).getUserRead().getVideoPath()), JzvdStd.SCREEN_FULLSCREEN, JZMediaIjk.class, mListData.get(position).getUserRead().getId());
- if (!Consts.getUMengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode())) {
- GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView);
- }
- holder.mVideo.startPreloading();
- /**
- * type=READ(用户朗读的)
- * type=EXAMPLE(官方的)
- * */
- holder.mItemView.setTag(mListData.get(position).getUserRead().getType());
- holder.itemView.setTag(mListData.get(position).getUserRead().getType());
- boolean needDanMu = false;
- boolean needTag = false;
- int tagType = -1;
- String tagText = "";
- if (!mListData.get(position).getUserRead().getTag().equals("ACTIVITY")) {
- needDanMu = true;
- }
- if (mListData.get(position).getUserRead().getTag().equals("READ")) {
- //是用户朗读的和官方作品
- needTag = false;
- tagText = "";
- } else if (mListData.get(position).getUserRead().getTag().equals("ACTIVITY")) {
- //是活动,判断活动类型
- Logger.e("mListData.get(position).getUserRead().getActivityType():" + mListData.get(position).getUserRead().getActivityType());
- switch (Integer.valueOf(mListData.get(position).getUserRead().getActivityType())) {
- case 1:
- //小红花,加载webview
- case 2:
- //抵用券,加载webview
- holder.mEventFrame.setVisibility(View.VISIBLE);
- holder.mEventFrame.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Logger.e("mListData.get(position).getUserRead().getActivityId():" + mListData.get(position).getUserRead().getActivityId());
- EfunboxUtil.toWebFlowerActivity(mContext, mListData.get(position).getUserRead().getActivityUrl(), mListData.get(position).getUserRead().getActivityId());
- }
- });
- break;
- case 3:
- //优秀作品或者是竞赛,跳转活动tab并且定位
- holder.mEventFrame.setVisibility(View.VISIBLE);
- holder.mEventFrame.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Logger.e("mListData.get(position).getUserRead().getActivityType():" + mListData.get(position).getUserRead().getActivityType());
- Consts.setEventPosition(Integer.valueOf(mListData.get(position).getUserRead().getActivityNumber()));
- Intent intent = new Intent("com.edufound.reader.main.setindex");
- mContext.sendBroadcast(intent);
- }
- });
- break;
- default:
- holder.mEventFrame.setVisibility(View.GONE);
- break;
- }
- holder.mSwitch.setVisibility(View.INVISIBLE);
- needTag = true;
- tagText = "活动";
- tagType = 1;
- } else if (mListData.get(position).getUserRead().getTag().equals("HOT")) {
- //热播作品
- needTag = true;
- tagText = "热播";
- tagType = 2;
- } else if (mListData.get(position).getUserRead().getTag().equals("NEW")) {
- //新作品
- needTag = true;
- tagText = "新作品";
- tagType = 3;
- } else if (mListData.get(position).getUserRead().getTag().equals("EXCELLENT")) {
- //优秀作品
- needTag = true;
- tagText = "优秀作品";
- tagType = 4;
- } else if (mListData.get(position).getUserRead().getTag().equals("EXAMPLE")) {
- needTag = true;
- tagText = "官方作品";
- tagType = 5;
- }
- if (needDanMu) {
- holder.initDanMu(mListData.get(position).getUserRead().getId());
- holder.mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- if (b) {
- holder.mMarqueen.setVisibility(View.VISIBLE);
- // holder.mMarqueen.start();
- } else {
- holder.mMarqueen.setVisibility(View.INVISIBLE);
- // holder.mMarqueen.stop();
- }
- }
- });
- }
- if (needTag) {
- holder.mTagLayout.removeAllViews();
- ImageView tagImg = new ImageView(mContext);
- tagImg.setLayoutParams(new FrameLayout.LayoutParams(new LinearLayout.LayoutParams(SizeUtils.dp2px(mContext, 142), SizeUtils.dp2px(mContext, 36))));
- Logger.e("tagType:" + tagType);
- switch (tagType) {
- case 1:
- //活动
- GlideUtils.loadImage(mContext, R.drawable.tag_activity, tagImg);
- break;
- case 2:
- //热播
- GlideUtils.loadImage(mContext, R.drawable.tag_hot, tagImg);
- break;
- case 3:
- //新作品
- GlideUtils.loadImage(mContext, R.drawable.tag_new, tagImg);
- break;
- case 4:
- //优秀作品
- GlideUtils.loadImage(mContext, R.drawable.tag_excellent, tagImg);
- break;
- case 5:
- //官方作品
- GlideUtils.loadImage(mContext, R.drawable.tag_example, tagImg);
- break;
- }
- holder.mTagLayout.addView(tagImg);
- holder.mTagLayout.setVisibility(View.VISIBLE);
- }
- // holder.mVideo.posterImageView.setImageURI(Uri.parse(mListData.get(position).videoUrl));
- }
- @Override
- public void onViewDetachedFromWindow(@NonNull VideoHolder holder) {
- super.onViewDetachedFromWindow(holder);
- // holder.mSwitch.setChecked(false);
- holder.moveHandler.removeMessages(1);
- holder.handlerRunning = false;
- }
- @Override
- public void onViewAttachedToWindow(@NonNull VideoHolder holder) {
- super.onViewAttachedToWindow(holder);
- if (holder.mScrollView != null) {
- holder.handlerRunning = true;
- holder.moveHandler.sendEmptyMessageDelayed(1, holder.mScrollViewMovedelayMillis);
- }
- }
- @Override
- public int getItemCount() {
- return mListData.size();
- }
- @Override
- public int getItemViewType(int position) {
- return position;
- }
- }
- class VideoHolder extends RecyclerView.ViewHolder {
- public View mItemView;
- public RvListJzvdStd mVideo;
- public LinearLayout mMarqueen;
- public Switch mSwitch;
- public FrameLayout mEventFrame;
- public FrameLayout mTagLayout;
- public FrameLayout mNotClickFrame;
- public Activity mContext;
- public HorizontalScrollView mScrollView;
- public int mScrollViewMovedelayMillis = 50;
- public boolean handlerRunning = false;
- public VideoHolder(Activity context, @NonNull View itemView) {
- super(itemView);
- mContext = context;
- mItemView = itemView;
- mVideo = itemView.findViewById((R.id.slidevideo_video));
- mNotClickFrame = itemView.findViewById(R.id.adapter_item_slidevideo_danmu_bg);
- mSwitch = itemView.findViewById(R.id.slidevideo_video_switch);
- mEventFrame = itemView.findViewById(R.id.adapter_item_slidevideo_event_frame);
- mTagLayout = itemView.findViewById(R.id.adapter_item_slidevideo_tagLayout);
- mTagLayout.setVisibility(View.GONE);
- mEventFrame.setVisibility(View.GONE);
- mSwitch.setVisibility(View.INVISIBLE);
- mMarqueen = itemView.findViewById(R.id.slidevideo_video_marqueen);
- mSwitch.setChecked(true);
- if (mSwitch.isChecked()) {
- mMarqueen.setVisibility(View.VISIBLE);
- if (mScrollView != null) {
- moveHandler.sendEmptyMessageDelayed(1, mScrollViewMovedelayMillis);
- }
- } else {
- mMarqueen.setVisibility(View.INVISIBLE);
- if (mScrollView != null) {
- moveHandler.removeMessages(1);
- }
- }
- mNotClickFrame.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return true;
- }
- });
- }
- public void initDanMu(String exampleId) {
- OkHttpClient.doGetAsync(mContext, new HttpInfo.Builder().setUrl(Consts.getFinalApi() + "/posts/list").addParam("columnId", exampleId).addParam("pageNo", String.valueOf(1)).addParam("pageSize", "100"), new Callback() {
- @RequiresApi(api = Build.VERSION_CODES.M)
- @Override
- public void onSuccess(HttpInfo info) throws IOException {
- HttpResultBean<HttpResultDataListBean<CommentListBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<CommentListBean>>>() {
- }.getType());
- if (bean.getData().getList() == null || bean.getData().getList().size() == 0) {
- mSwitch.setVisibility(View.INVISIBLE);
- return;
- }
- mSwitch.setVisibility(View.VISIBLE);
- boolean isNeedAdd = false;
- List<CommentListBean> list = null;
- if (bean.getData().getList().size() < 6) {
- list = bean.getData().getList();
- isNeedAdd = true;
- }
- if (isNeedAdd) {
- for (int i = 0; i < 3; i++) {
- bean.getData().getList().addAll(list);
- }
- }
- for (int i = 0; i < bean.getData().getList().size(); i++) {
- FrameLayout layout = (FrameLayout) LayoutInflater.from(mContext).inflate(R.layout.slide_video_marqueen_item, null, false);
- TextView tv = layout.findViewById(R.id.item_marqueen_text);
- tv.setText(bean.getData().getList().get(i).getDetailDesc());
- mMarqueen.addView(layout);
- }
- mScrollView = (HorizontalScrollView) mMarqueen.getParent();
- mScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
- @Override
- public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
- View view = ((HorizontalScrollView) v).getChildAt(0);
- //判断是否滑动栏到底了,如果是,就让iv这个图片隐藏,否则显示
- if (view.getMeasuredWidth() <= v.getScrollX() + v.getWidth()) {
- //滑动到底部了
- mScrollView.postDelayed(new Runnable() {
- @Override
- public void run() {
- mScrollView.scrollTo(0, 0);
- }
- }, 2000);
- } else {
- }
- }
- });
- mScrollView.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return true;
- }
- });
- mMarqueen.postDelayed(new Runnable() {
- @Override
- public void run() {
- if (!handlerRunning) {
- moveHandler.sendEmptyMessageDelayed(1, mScrollViewMovedelayMillis);
- }
- }
- }, 500);
- // SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList());
- // mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, true));
- // mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 23)));
- // mMarqueen.setAdapter(adapter);
- }
- @Override
- public void onFailure(HttpInfo info) throws IOException {
- Logger.e("获取弹幕失败:" + info.getRetDetail());
- }
- });
- }
- android.os.Handler moveHandler = new android.os.Handler(new android.os.Handler.Callback() {
- @Override
- public boolean handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case 1:
- mScrollView.scrollBy(2, 0);
- moveHandler.sendEmptyMessageDelayed(1, mScrollViewMovedelayMillis);
- break;
- }
- return false;
- }
- });
- }
- class SpacesItemDecoration extends RecyclerView.ItemDecoration {
- private int space;
- public SpacesItemDecoration(int space) {
- this.space = space;
- }
- @Override
- public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
- outRect.left = space;
- outRect.right = space;
- // outRect.bottom = space;
- // Add top margin only for the first item to avoid double space between items
- }
- }
|