package com.edufound.reader.adapter; import android.app.Activity; import android.graphics.Rect; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.Switch; import com.edufound.reader.R; 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.AutoPollRecyclerView; import com.edufound.reader.cusview.RvListJzvdStd; import com.edufound.reader.util.Consts; 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.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import cn.jzvd.JZDataSource; import cn.jzvd.JzvdStd; public class SlideVideoAdapter extends RecyclerView.Adapter { private LayoutInflater mLayoutInflater; private Activity mContext; private List mListData; public SlideVideoAdapter(Activity context, @NonNull List data) { mContext = context; mLayoutInflater = LayoutInflater.from(context); this.mListData = data; } public void addMored(List listData) { mListData.addAll(listData); } @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, 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); GlideUtils.loadImageSizeKipMemoryCache(mContext, mListData.get(position).getUserRead().getCoverImg(), holder.mVideo.posterImageView); holder.initDanMu(mListData.get(position).getUserRead().getId()); holder.mVideo.startPreloading(); 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(); } } }); // holder.mVideo.posterImageView.setImageURI(Uri.parse(mListData.get(position).videoUrl)); } @Override public void onViewDetachedFromWindow(@NonNull VideoHolder holder) { super.onViewDetachedFromWindow(holder); holder.mSwitch.setChecked(false); } @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 AutoPollRecyclerView mMarqueen; public Switch mSwitch; public Activity mContext; public VideoHolder(Activity context, @NonNull View itemView) { super(itemView); mContext = context; mItemView = itemView; mVideo = itemView.findViewById((R.id.slidevideo_video)); mMarqueen = itemView.findViewById(R.id.slidevideo_video_marqueen); mSwitch = itemView.findViewById(R.id.slidevideo_video_switch); mSwitch.setChecked(false); if (mSwitch.isChecked()) { mMarqueen.setVisibility(View.VISIBLE); mMarqueen.start(); } else { mMarqueen.setVisibility(View.INVISIBLE); mMarqueen.stop(); } } 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", "1000"), new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean> bean = info.getRetDetail(new TypeToken>>() { }.getType()); SlideVideoDanMarqueenAdapter adapter = new SlideVideoDanMarqueenAdapter(mContext, bean.getData().getList()); mMarqueen.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); mMarqueen.addItemDecoration(new SpacesItemDecoration(SizeUtils.dp2px(mContext, 20))); mMarqueen.setAdapter(adapter); } @Override public void onFailure(HttpInfo info) throws IOException { Logger.e("获取弹幕失败:" + info.getRetDetail()); } }); } } 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 } }