package com.weikou.beibeivideo.ui.recommend;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.graphics.Canvas;
|
import android.graphics.Rect;
|
import android.support.v4.view.ViewPager;
|
import android.support.v7.widget.GridLayoutManager;
|
import android.support.v7.widget.RecyclerView;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.view.ViewGroup;
|
import android.view.ViewParent;
|
import android.widget.FrameLayout;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bytedance.sdk.openadsdk.TTAdDislike;
|
import com.lcjian.library.util.SystemCommon;
|
import com.lcjian.library.util.common.DimenUtils;
|
import com.lcjian.library.util.common.StringUtils;
|
import com.lcjian.library.widget.RatioLayout;
|
import com.viewpagerindicator.LinePageIndicator;
|
import com.weikou.beibeivideo.entity.HomeAd;
|
import com.weikou.beibeivideo.entity.HomeType;
|
import com.weikou.beibeivideo.entity.HomeVideo;
|
import com.weikou.beibeivideo.entity.VideoInfo;
|
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
|
import com.weikou.beibeivideo.test.MyViewPager;
|
import com.weikou.beibeivideo.ui.media.VideoDetailActivity;
|
import com.yeshi.buwanshequ.R;
|
|
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
//广告Container
|
private ExpressAdContainer firstAd;
|
private List<ExpressAdContainer> bigImgAdList;//大图广告列表
|
private Activity mContext;
|
private List<HomeType> homeTypeList;
|
private List<HomeAd> homeAdList;
|
|
private final static int TYPE_HOME_BANNER = 1;
|
private final static int TYPE_HOME_TYPE = 2;
|
private final static int TYPE_HOME_AD = 3;
|
private LayoutInflater inflater;
|
|
public RecommendNewAdapter(Activity context, List<HomeType> homeTypeList, List<HomeAd> homeAdList) {
|
this.mContext = context;
|
this.homeTypeList = homeTypeList;
|
this.homeAdList = homeAdList;
|
inflater = LayoutInflater.from(mContext);
|
}
|
|
public void setBigImgAdList(List<ExpressAdContainer> bigImgAdList) {
|
this.bigImgAdList = bigImgAdList;
|
}
|
|
public void setFirstAd(ExpressAdContainer firstAd) {
|
this.firstAd = firstAd;
|
}
|
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
switch (viewType) {
|
case TYPE_HOME_BANNER:
|
return new HomeBannerHolder(inflater.inflate(R.layout.recommend_top, parent, false));
|
case TYPE_HOME_TYPE:
|
return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool());
|
case TYPE_HOME_AD:
|
return new AdHolder(inflater.inflate(R.layout.item_recommend_home_type_ad, parent, false));
|
}
|
return null;
|
}
|
|
private int getHomeTypeByAbsolutePosition(int p) {
|
int position = p;
|
if (p == 0)
|
position = p;
|
else if (p == 1) {
|
if (hasBanner())
|
position--;
|
} else {
|
if (hasBanner())
|
position--;
|
if (hasAd())
|
position--;
|
}
|
|
return position;
|
}
|
|
private Runnable autoPlayBanner = null;
|
|
private synchronized void autoPlayBanner(final ViewPager viewPager) {
|
|
if (autoPlayBanner == null) {
|
autoPlayBanner = new Runnable() {
|
@Override
|
public void run() {
|
if (homeAdList == null || homeAdList.size() <= 0)
|
return;
|
if (viewPager.getCurrentItem() >= homeAdList.size() - 1) {
|
viewPager.setCurrentItem(0, true);
|
} else {
|
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
|
}
|
autoPlayBanner(viewPager);
|
}
|
};
|
viewPager.postDelayed(autoPlayBanner, 3000);
|
} else {
|
viewPager.removeCallbacks(autoPlayBanner);
|
viewPager.postDelayed(autoPlayBanner, 3000);
|
}
|
|
|
}
|
|
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 total = parent.getAdapter().getItemCount();
|
if (index % 2 == 0) {
|
outRect.left = 0; //第一列左边贴边
|
outRect.right = DimenUtils.dipToPixels(5, view.getContext());
|
} else {
|
outRect.right = 0; //第一列左边贴边
|
outRect.left = DimenUtils.dipToPixels(5, view.getContext());
|
}
|
|
if (index - 1 > 0) {
|
outRect.top = DimenUtils.dipToPixels(5, view.getContext());
|
} else
|
outRect.top = 0;
|
|
if (total % 2 == 0) {
|
if (total > 2 && (index < total - 2))
|
outRect.bottom = DimenUtils.dipToPixels(5, view.getContext());
|
else
|
outRect.bottom = 0;
|
} else {
|
if (total > 2 && (index < total - 1))
|
outRect.bottom = DimenUtils.dipToPixels(5, view.getContext());
|
else
|
outRect.bottom = 0;
|
}
|
|
// if (parent.getChildAdapterPosition(view) >= 3) {
|
// outRect.top = SizeUtils.dp2px(mContext, 10);
|
// } else {
|
// outRect.top = 0;
|
// }
|
}
|
};
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
|
if (viewHolder instanceof HomeBannerHolder) {
|
int width = (int) SystemCommon.getScreenWidth(mContext);
|
HomeBannerHolder holder = (HomeBannerHolder) viewHolder;
|
holder.vp_recommend.setAdapter(new RecommendTopAdapter(homeAdList, mContext, false));
|
holder.indicator_recommend.setScreenWidth(width);
|
holder.indicator_recommend.setSelectedColor(holder.vp_recommend.getContext().getResources()
|
.getColor(R.color.yellow));
|
holder.indicator_recommend.setUnselectedColor(0xbbADA9A7);
|
holder.indicator_recommend.setViewPager(holder.vp_recommend);
|
autoPlayBanner(holder.vp_recommend);
|
} else if (viewHolder instanceof HomeTypeHolder) {
|
int position = getHomeTypeByAbsolutePosition(i);
|
if (position >= homeTypeList.size())
|
return;
|
HomeType homeType = homeTypeList.get(position);
|
HomeTypeHolder holder = (HomeTypeHolder) viewHolder;
|
|
if (holder.rv_content.getLayoutManager() == null || !(holder.rv_content.getLayoutManager() instanceof GridLayoutManager)) {
|
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(mContext, 4);
|
holder.rv_content.setLayoutManager(layoutManager);
|
}
|
//统一分为2列
|
((GridLayoutManager) holder.rv_content.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
@Override
|
public int getSpanSize(int position) {
|
return 2;
|
}
|
});
|
|
HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), position == 0 ? firstAd : null, 8);
|
holder.rv_content.setAdapter(adapter);
|
|
//设置间距
|
holder.rv_content.removeItemDecoration(itemDecoration);
|
holder.rv_content.addItemDecoration(itemDecoration);
|
|
Glide.with(mContext).load(homeType.getIcon())
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.drawable.ic_stars_collection).into(holder.tv_category_icon);
|
holder.tv_category_name.setText(homeType.getName());
|
if (Boolean.parseBoolean(homeType.getHasMore())) {
|
holder.tv_more.setVisibility(View.VISIBLE);
|
} else {
|
holder.tv_more.setVisibility(View.GONE);
|
}
|
} else if (viewHolder instanceof AdHolder) {
|
AdHolder holder = (AdHolder) viewHolder;
|
holder.fl_ad.removeAllViews();
|
ExpressAdContainer ad = null;
|
if (i <= 2) {//加载第一个广告
|
if (bigImgAdList != null && bigImgAdList.size() > 0) {
|
ad = bigImgAdList.get(0);
|
}
|
} else {//加载第二个广告
|
if (bigImgAdList != null && bigImgAdList.size() > 1) {
|
ad = bigImgAdList.get(1);
|
}
|
}
|
|
if (ad != null) {
|
holder.view.setVisibility(View.VISIBLE);
|
if (ad.getGdt() != null) {
|
ViewParent parent= ad.getGdt().getParent();
|
if(parent!=null) {
|
FrameLayout parentContainer = (FrameLayout) parent;
|
parentContainer.removeAllViews();
|
}
|
ad.getGdt().render();
|
holder.fl_ad.addView(ad.getGdt());
|
} else if (ad.getCsj() != null) {
|
ViewParent parent= ad.getCsj().getExpressAdView().getParent();
|
if(parent!=null) {
|
FrameLayout parentContainer = (FrameLayout) parent;
|
parentContainer.removeAllViews();
|
}
|
ad.getCsj().render();
|
final ExpressAdContainer adTemp = ad;
|
ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() {
|
|
@Override
|
public void onSelected(int i, String s) {
|
bigImgAdList.remove(adTemp);
|
notifyDataSetChanged();
|
}
|
|
@Override
|
public void onCancel() {
|
|
}
|
|
@Override
|
public void onRefuse() {
|
|
}
|
});
|
holder.fl_ad.addView(ad.getCsj().getExpressAdView());
|
}
|
}else{
|
holder.view.setVisibility(View.GONE);
|
}
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = 0;
|
if (homeTypeList != null && homeTypeList.size() > 0)
|
count += homeTypeList.size();
|
if (homeAdList != null && homeAdList.size() > 0)
|
count += 1;
|
if (bigImgAdList != null && bigImgAdList.size() > 0)
|
count += bigImgAdList.size();
|
return count;
|
}
|
|
private boolean hasBanner() {
|
return homeAdList != null && homeAdList.size() > 0;
|
}
|
|
private boolean hasHomeType() {
|
return homeTypeList != null && homeTypeList.size() > 0;
|
}
|
|
private boolean hasAd() {
|
return bigImgAdList != null && bigImgAdList.size() > 0;
|
}
|
|
/**
|
* banner第一栏,视频内容第二栏,广告第三栏和最后一栏
|
*
|
* @param position
|
* @return
|
*/
|
//获取类型
|
@Override
|
public int getItemViewType(int position) {
|
if (position == 0) {
|
if (hasBanner())
|
return TYPE_HOME_BANNER;
|
else
|
return TYPE_HOME_TYPE;
|
} else if (position == getItemCount() - 1) {//最后一栏
|
if (hasAd())
|
return TYPE_HOME_AD;
|
else
|
return TYPE_HOME_TYPE;
|
} else {//中间栏
|
if (position == 1) {
|
if (hasBanner()) {
|
return TYPE_HOME_TYPE;
|
} else {
|
if (hasAd())
|
return TYPE_HOME_AD;
|
else
|
return TYPE_HOME_TYPE;
|
}
|
} else if (position == 2) {
|
if (hasBanner() && hasHomeType() && hasAd())
|
return TYPE_HOME_AD;
|
else
|
return TYPE_HOME_TYPE;
|
} else {
|
return TYPE_HOME_TYPE;
|
}
|
}
|
}
|
|
class HomeBannerHolder extends RecyclerView.ViewHolder {
|
MyViewPager vp_recommend;
|
LinearLayout ll_ad_containner;
|
RatioLayout rl_recommend_top;
|
LinePageIndicator indicator_recommend;
|
FrameLayout fl_ad;
|
|
public HomeBannerHolder(View view) {
|
super(view);
|
vp_recommend = view.findViewById(R.id.vp_recommend);
|
ll_ad_containner = view.findViewById(R.id.ll_ad_containner);
|
rl_recommend_top = view.findViewById(R.id.rl_recommend_top);
|
indicator_recommend = view.findViewById(R.id.indicator_recommend);
|
fl_ad = view.findViewById(R.id.fl_ad);
|
}
|
}
|
|
class HomeTypeHolder extends RecyclerView.ViewHolder {
|
TextView tv_category_name;
|
ImageView tv_category_icon;
|
TextView tv_more;
|
RecyclerView rv_content;
|
RelativeLayout rl_title_item;
|
|
public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) {
|
super(convertView);
|
rl_title_item = convertView
|
.findViewById(R.id.rl_title_item);
|
tv_category_name = convertView
|
.findViewById(R.id.tv_category_name);
|
tv_category_icon = convertView
|
.findViewById(R.id.tv_category_icon);
|
tv_more = convertView
|
.findViewById(R.id.tv_more);
|
rv_content = convertView
|
.findViewById(R.id.rv_content);
|
if (recycledViewPool != null)
|
rv_content.setRecycledViewPool(recycledViewPool);
|
}
|
}
|
|
class AdHolder extends RecyclerView.ViewHolder {
|
|
FrameLayout fl_ad;
|
View view;
|
|
public AdHolder(View view) {
|
super(view);
|
this.view=view;
|
fl_ad = view.findViewById(R.id.fl_ad);
|
}
|
|
}
|
|
|
public class HomeTypeContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
private Activity mContext;
|
private List<ExpressAdContainer> adList;
|
private List<HomeVideo> homeVideoList;
|
private int maxItemNum;
|
|
private final int TYPE_CONTENT = 1;
|
private final int TYPE_AD = 0;
|
|
|
public HomeTypeContentAdapter(Activity context, List<HomeVideo> homeVideoList, ExpressAdContainer ad, int maxItemNum) {
|
this.mContext = context;
|
this.homeVideoList = homeVideoList;
|
if (adList == null)
|
adList = new ArrayList<>();
|
adList.clear();
|
if (ad != null)
|
adList.add(ad);
|
this.maxItemNum = maxItemNum;
|
}
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
|
switch (type) {
|
case TYPE_AD:
|
return new HomeTypeAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false));
|
case TYPE_CONTENT:
|
return new HomeTypeContentHolder(inflater.inflate(R.layout.item_movie, parent, false));
|
}
|
return null;
|
}
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) {
|
if (viewHolder instanceof HomeTypeContentHolder) {
|
HomeTypeContentHolder holder = (HomeTypeContentHolder) viewHolder;
|
int position = p;
|
if (adList != null && adList.size() > 0) {
|
position -= 1;
|
}
|
if (position >= homeVideoList.size())
|
return;
|
final HomeVideo info = homeVideoList.get(position);
|
//设置内容
|
holder.ll_video_show.setVisibility(View.VISIBLE);
|
if (StringUtils.isEmpty(info.getPicture())) {
|
Glide.with(mContext).load(info.getVideo().getPicture())
|
.placeholder(R.drawable.ic_default_cover)
|
.error(R.drawable.ic_default_cover)
|
.centerCrop().crossFade()
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.into(holder.iv_movie_cover);
|
} else {
|
try {
|
Glide.with(mContext).load(info.getPicture())
|
.placeholder(R.drawable.ic_default_cover)
|
.error(R.drawable.ic_default_cover)
|
.centerCrop().crossFade()
|
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.into(holder.iv_movie_cover);
|
} catch (IllegalArgumentException e) {
|
e.printStackTrace();
|
}
|
}
|
holder.tv_movie_title.setText(info.getVideo().getName());
|
holder.tv_movie_rating.setText(StringUtils.isBlank(info
|
.getVideo().getTag()) ? "" : info.getVideo()
|
.getTag());
|
DecimalFormat df = new DecimalFormat("###.0");
|
holder.tv_movie_play_num.setText(StringUtils.isBlank(info
|
.getVideo().getWatchCount()) ? "0" : (Integer.parseInt(info
|
.getVideo().getWatchCount())) / 10000 > 0 ? df.format(Integer.parseInt(info
|
.getVideo().getWatchCount()) / 10000f) + "万" : info
|
.getVideo().getWatchCount());
|
holder.tv_movie_comment_num.setText(StringUtils.isBlank(info.getVideo().getCommentCount()) ? "0" : info.getVideo().getCommentCount());
|
holder.ll_video_show
|
.setOnClickListener(new OnClickListener() {
|
@Override
|
public void onClick(final View v) {
|
//跳转到商品视频播放页
|
myClick(info.getVideo(), v);
|
}
|
});
|
} else if (viewHolder instanceof HomeTypeAdHolder) {//广告
|
HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder;
|
holder.fl_container.removeAllViews();
|
final ExpressAdContainer ad = adList.get(0);
|
if (ad.getGdt() != null) {
|
ViewParent parent= ad.getGdt().getParent();
|
if(parent!=null) {
|
FrameLayout parentContainer = (FrameLayout) parent;
|
parentContainer.removeAllViews();
|
}
|
|
ad.getGdt().render();
|
holder.tv_movie_play_num.setText("112");
|
holder.tv_movie_title.setText(adList.get(0).getGdt().getBoundData().getTitle());
|
holder.fl_container.addView(adList.get(0).getGdt());
|
} else if (adList.get(0).getCsj() != null) {
|
Map<String, Object> map= ad.getCsj().getMediaExtraInfo();
|
ViewParent parent= ad.getCsj().getExpressAdView().getParent();
|
if(parent!=null) {
|
FrameLayout parentContainer = (FrameLayout) parent;
|
parentContainer.removeAllViews();
|
}
|
ad.getCsj().render();
|
ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() {
|
|
@Override
|
public void onSelected(int i, String s) {
|
//点击消失
|
adList.set(0,null);
|
notifyDataSetChanged();
|
}
|
|
@Override
|
public void onCancel() {
|
|
}
|
|
@Override
|
public void onRefuse() {
|
|
}
|
});
|
holder.fl_container.addView(ad.getCsj().getExpressAdView());
|
}
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = 0;
|
if (adList != null && adList.size() > 0)
|
count++;
|
if (homeVideoList != null)
|
count += homeVideoList.size();
|
if (count > maxItemNum)
|
return maxItemNum;
|
else
|
return count % 2 == 0 ? count : count - 1;
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
if (position == 0 && adList.size() > 0)
|
return TYPE_AD;
|
else
|
return TYPE_CONTENT;
|
}
|
|
|
private void myClick(VideoInfo info, final View v) {
|
Intent intent = new Intent(v.getContext(), VideoDetailActivity.class);
|
intent.putExtra("video_info", info);
|
v.getContext().startActivity(intent);
|
}
|
|
}
|
|
|
class HomeTypeContentHolder extends RecyclerView.ViewHolder {
|
LinearLayout ll_video_show;
|
ImageView iv_movie_cover;
|
ImageView iv_spread;
|
TextView tv_movie_rating;
|
ImageView iv_ad_logo;
|
TextView tv_movie_play_num;
|
TextView tv_movie_comment_num;
|
TextView tv_movie_title;
|
|
public HomeTypeContentHolder(View view) {
|
super(view);
|
ll_video_show = view.findViewById(R.id.ll_video_show);
|
iv_movie_cover = view.findViewById(R.id.iv_movie_cover);
|
iv_spread = view.findViewById(R.id.iv_spread);
|
tv_movie_rating = view.findViewById(R.id.tv_movie_rating);
|
iv_ad_logo = view.findViewById(R.id.iv_ad_logo);
|
tv_movie_play_num = view.findViewById(R.id.tv_movie_play_num);
|
tv_movie_comment_num = view.findViewById(R.id.tv_movie_comment_num);
|
tv_movie_title = view.findViewById(R.id.tv_movie_title);
|
}
|
}
|
|
class HomeTypeAdHolder extends RecyclerView.ViewHolder {
|
|
FrameLayout fl_container;
|
TextView tv_movie_title;
|
TextView tv_movie_play_num;
|
|
public HomeTypeAdHolder(View view) {
|
super(view);
|
fl_container = view.findViewById(R.id.fl_container);
|
tv_movie_title = view.findViewById(R.id.tv_movie_title);
|
tv_movie_play_num = view.findViewById(R.id.tv_movie_play_num);
|
}
|
|
}
|
|
}
|