package com.hanju.video.app.ui.mine;
|
|
import android.content.Context;
|
import android.content.Intent;
|
import android.graphics.Canvas;
|
import android.graphics.Rect;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.request.RequestOptions;
|
import com.hanju.video.app.R;
|
import com.hanju.video.app.entity.video.VideoInfo;
|
import com.hanju.video.app.entity.video.holder.FooterViewHolder;
|
import com.hanju.video.app.entity.video.holder.HeaderViewHolder;
|
import com.hanju.video.app.ui.media.VideoDetailActivity;
|
import com.hanju.lib.library.util.common.DimenUtils;
|
import com.hanju.lib.library.util.common.StringUtils;
|
import com.hanju.lib.library.widget.RatioLayout;
|
|
import java.util.List;
|
|
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
|
|
public class WatchHistoryMineAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
private Context mContext;
|
private List<MineWatchHistoryVideoInfo> contentList;
|
private LayoutInflater inflater;
|
|
String TAG = "WatchHistoryMineAdapter";
|
|
public WatchHistoryMineAdapter(Context context, List<MineWatchHistoryVideoInfo> list) {
|
this.mContext = context;
|
this.contentList = list;
|
inflater = LayoutInflater.from(context);
|
}
|
|
|
RecyclerView.ItemDecoration itemDecoration = new RecyclerView.ItemDecoration() {
|
@Override
|
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
super.onDraw(c, parent, state);
|
}
|
|
@Override
|
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
super.onDrawOver(c, parent, state);
|
}
|
|
@Override
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
super.getItemOffsets(outRect, view, parent, state);
|
int index = parent.getChildAdapterPosition(view);
|
int minWidth = DimenUtils.dipToPixels(4, view.getContext());
|
MineWatchHistoryVideoInfo videoInfo = contentList.get(index);
|
int preWidthCount = 0;
|
for (int i = 0; i < index; i++) {
|
MineWatchHistoryVideoInfo temVideoInfo = contentList.get(i);
|
preWidthCount += temVideoInfo.isAlbum() ? 2 : 1;
|
}
|
|
if (videoInfo.isAlbum()) {
|
outRect.right = minWidth * 2;
|
outRect.top = 0;
|
outRect.bottom = 0;
|
} else {
|
outRect.right = minWidth * 2;
|
if (preWidthCount % 2 == 0) {
|
outRect.top = 0;
|
outRect.bottom = minWidth / 2;
|
} else {
|
outRect.top = minWidth / 2;
|
outRect.bottom = 0;
|
}
|
}
|
}
|
};
|
|
|
/**
|
* 设置列表的显示样式(一行2列)
|
*
|
* @param rv
|
*/
|
public void initRecyclerViewDisplayWidth(RecyclerView rv) {
|
if (rv.getLayoutManager() == null || !(rv.getLayoutManager() instanceof GridLayoutManager)) {
|
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(rv.getContext(), 2);
|
rv.setLayoutManager(layoutManager);
|
}
|
//统一分为2列
|
((GridLayoutManager) rv.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
@Override
|
public int getSpanSize(int position) {
|
MineWatchHistoryVideoInfo videoInfo = contentList.get(position);
|
if (videoInfo.isAlbum())
|
return 2;
|
else
|
return 1;
|
}
|
});
|
|
for (int i = 0; i < rv.getItemDecorationCount(); i++) {
|
rv.removeItemDecoration(rv.getItemDecorationAt(i));
|
i--;
|
}
|
rv.addItemDecoration(itemDecoration);
|
}
|
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
|
return new ViewHolder(inflater.inflate(R.layout.item_mine_watch_history, parent, false));
|
}
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) {
|
if ((viewHolder instanceof HeaderViewHolder) || (viewHolder instanceof FooterViewHolder)) {
|
return;
|
}
|
final MineWatchHistoryVideoInfo content = contentList.get(p);
|
ViewGroup.LayoutParams params = viewHolder.itemView.getLayoutParams();
|
ViewHolder holder = (ViewHolder) viewHolder;
|
final VideoInfo info = content.getVideoInfo();
|
holder.tv_name.setText(info.getName());
|
float ratio = 0f;
|
if (content.isAlbum()) {
|
ratio = 1.38f;
|
} else {
|
ratio = 0.63f;
|
}
|
|
holder.rl_pic.setRatio(ratio);
|
ViewGroup.LayoutParams params1 = holder.view_bg.getLayoutParams();
|
params1.height = (int) (params1.width * ratio);
|
|
|
holder.iv_pic.post(new Runnable() {
|
@Override
|
public void run() {
|
String defaultPicture = "";
|
if (content.isAlbum()) {
|
defaultPicture = info.getVpicture();
|
} else {
|
defaultPicture = info.getVpicture();
|
}
|
if (StringUtils.isEmpty(defaultPicture)) {
|
Glide.with(mContext).load(info.getPicture()).transition(withCrossFade())
|
.apply(new RequestOptions().centerCrop().placeholder(R.drawable.shape_default_cover).diskCacheStrategy(DiskCacheStrategy.ALL))
|
.into(holder.iv_pic);
|
} else {
|
Glide.with(mContext).load(defaultPicture).transition(withCrossFade())
|
.apply(new RequestOptions().centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL))
|
.into(holder.iv_pic);
|
}
|
}
|
});
|
|
|
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
myClick(info, mContext);
|
}
|
});
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = 0;
|
if (contentList != null)
|
count = contentList.size();
|
return count;
|
}
|
|
|
private void myClick(VideoInfo info, Context context) {
|
Intent intent = new Intent(context, VideoDetailActivity.class);
|
intent.putExtra("video_info", info);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
context.startActivity(intent);
|
}
|
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
public RatioLayout rl_pic;
|
public ImageView iv_pic;
|
public TextView tv_name;
|
public View view_bg;
|
|
public ViewHolder(@NonNull View itemView) {
|
super(itemView);
|
rl_pic = itemView.findViewById(R.id.rl_pic);
|
iv_pic = itemView.findViewById(R.id.iv_pic);
|
tv_name = itemView.findViewById(R.id.tv_name);
|
view_bg = itemView.findViewById(R.id.view_bg);
|
}
|
}
|
|
|
public static class MineWatchHistoryVideoInfo {
|
private boolean album;
|
private VideoInfo videoInfo;
|
|
public MineWatchHistoryVideoInfo(boolean album, VideoInfo videoInfo) {
|
this.album = album;
|
this.videoInfo = videoInfo;
|
}
|
|
public boolean isAlbum() {
|
return album;
|
}
|
|
public void setAlbum(boolean album) {
|
this.album = album;
|
}
|
|
public VideoInfo getVideoInfo() {
|
return videoInfo;
|
}
|
|
public void setVideoInfo(VideoInfo videoInfo) {
|
this.videoInfo = videoInfo;
|
}
|
}
|
|
|
}
|