package com.weikou.beibeivideo.ui.recommend;
|
|
import android.app.Activity;
|
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 android.widget.VideoView;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bytedance.sdk.openadsdk.TTAdConstant;
|
import com.bytedance.sdk.openadsdk.TTFeedAd;
|
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.HomeType;
|
import com.weikou.beibeivideo.entity.HomeVideo;
|
import com.weikou.beibeivideo.entity.VideoInfo;
|
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
|
import com.weikou.beibeivideo.entity.recommend.HomeTypeContent;
|
import com.weikou.beibeivideo.entity.recommend.RecommendContent;
|
import com.weikou.beibeivideo.test.MyViewPager;
|
import com.weikou.beibeivideo.ui.media.VideoDetailActivity;
|
import com.weikou.beibeivideo.util.ad.CSJAdUtil;
|
import com.weikou.beibeivideo.util.ad.ExpressAdManager;
|
import com.yeshi.buwanshequ.R;
|
|
import java.text.DecimalFormat;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
private Activity mContext;
|
List<RecommendContent> contentList;
|
private LayoutInflater inflater;
|
|
public RecommendNewAdapter(Activity context, List<RecommendContent> contentList) {
|
this.mContext = context;
|
this.contentList = contentList;
|
inflater = LayoutInflater.from(mContext);
|
}
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
switch (viewType) {
|
case RecommendContent.TYPE_BANNER:
|
return new HomeBannerHolder(inflater.inflate(R.layout.recommend_top, parent, false));
|
case RecommendContent.TYPE_HOMETYPE:
|
return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool());
|
case RecommendContent.TYPE_AD:
|
return new AdHolder(inflater.inflate(R.layout.item_recommend_home_type_ad, parent, false));
|
}
|
return null;
|
}
|
|
|
private Runnable autoPlayBanner = null;
|
|
private synchronized void autoPlayBanner(final ViewPager viewPager) {
|
|
if (autoPlayBanner == null) {
|
autoPlayBanner = new Runnable() {
|
@Override
|
public void run() {
|
if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == RecommendContent.TYPE_BANNER)
|
if (contentList.get(0).getHomeBannerList() == null || contentList.get(0).getHomeBannerList().size() <= 0)
|
return;
|
if (viewPager.getCurrentItem() >= contentList.get(0).getHomeBannerList().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) {
|
final RecommendContent content = contentList.get(i);
|
if (viewHolder instanceof HomeBannerHolder) {
|
int width = (int) SystemCommon.getScreenWidth(mContext);
|
HomeBannerHolder holder = (HomeBannerHolder) viewHolder;
|
holder.vp_recommend.setAdapter(new RecommendTopAdapter(content.getHomeBannerList(), 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) {
|
HomeType homeType = content.getHomeType();
|
HomeTypeHolder holder = (HomeTypeHolder) viewHolder;
|
if (homeType == null) {
|
holder.view.setVisibility(View.GONE);
|
return;
|
}
|
holder.view.setVisibility(View.VISIBLE);
|
|
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;
|
}
|
});
|
boolean isFirst = false;
|
for (RecommendContent content1 : contentList)
|
if (content1.getType() == RecommendContent.TYPE_HOMETYPE) {
|
if (content1.getHomeType().getId().equalsIgnoreCase(content.getHomeType().getId())) {
|
isFirst = true;
|
}
|
break;
|
}
|
|
HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), isFirst ? true : false, 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 = content.getAd();
|
|
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) {
|
holder.fl_ad.addView(holder.csjAdHolder.view);
|
//填充广告内容
|
ArrayList<View> images = new ArrayList<>();
|
if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) {
|
holder.csjAdHolder.iv_pic.setVisibility(View.GONE);
|
holder.csjAdHolder.vv_video.setVisibility(View.VISIBLE);
|
images.add(holder.csjAdHolder.vv_video);
|
} else {
|
holder.csjAdHolder.iv_pic.setVisibility(View.VISIBLE);
|
holder.csjAdHolder.vv_video.setVisibility(View.GONE);
|
images.add(holder.csjAdHolder.iv_pic);
|
}
|
CSJAdUtil.bindData(holder.csjAdHolder.view, holder.csjAdHolder.iv_close, holder.csjAdHolder.tv_title, images, ad.getCsj());
|
}
|
} else {
|
holder.view.setVisibility(View.GONE);
|
}
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
return this.contentList.size();
|
}
|
|
/**
|
* banner第一栏,视频内容第二栏,广告第三栏和最后一栏
|
*
|
* @param position
|
* @return
|
*/
|
//获取类型
|
@Override
|
public int getItemViewType(int position) {
|
return this.contentList.get(position).getType();
|
}
|
|
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;
|
View view;
|
|
public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) {
|
super(convertView);
|
this.view = 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;
|
CSJAdHolder csjAdHolder;
|
|
|
public AdHolder(View view) {
|
super(view);
|
this.view = view;
|
csjAdHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column1, null));
|
fl_ad = view.findViewById(R.id.fl_ad);
|
}
|
|
}
|
|
|
public class HomeTypeContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
private Activity mContext;
|
private List<HomeTypeContent> contentList;
|
private int maxItemNum;
|
|
private ExpressAdManager expressAdManager;
|
|
private boolean needAd;
|
|
|
public HomeTypeContentAdapter(final Activity context, List<HomeVideo> videoList, boolean needAd, int maxItemNum) {
|
this.needAd = needAd;
|
this.mContext = context;
|
if (contentList == null)
|
this.contentList = new ArrayList<>();
|
this.contentList.clear();
|
for (HomeVideo hv : videoList) {
|
this.contentList.add(new HomeTypeContent(HomeTypeContent.TYPE_CONTENT, hv));
|
}
|
|
|
this.maxItemNum = maxItemNum;
|
}
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
|
switch (type) {
|
case HomeTypeContent.TYPE_AD:
|
return new HomeTypeAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false));
|
case HomeTypeContent.TYPE_CONTENT:
|
return new HomeTypeContentHolder(inflater.inflate(R.layout.item_movie, parent, false));
|
}
|
return null;
|
}
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) {
|
final HomeTypeContent content = contentList.get(p);
|
if (viewHolder instanceof HomeTypeContentHolder) {
|
HomeTypeContentHolder holder = (HomeTypeContentHolder) viewHolder;
|
final HomeVideo info = content.getHomeVideo();
|
//设置内容
|
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) {//广告
|
final HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder;
|
holder.fl_container.removeAllViews();
|
final ExpressAdContainer ad = content.getAd();
|
if (ad == null) {//广告为空
|
holder.view.setVisibility(View.GONE);
|
if (needAd) {
|
if (expressAdManager == null)
|
expressAdManager = new ExpressAdManager(ExpressAdManager.SOURCE_CSJ, mContext);
|
expressAdManager.loadRecommendSmallAd(new ExpressAdManager.IAdLoadListener() {
|
@Override
|
public void onSuccess(List<ExpressAdContainer> adList) {
|
if (adList != null && adList.size() > 0) {
|
if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == HomeTypeContent.TYPE_CONTENT) {
|
contentList.add(0,new HomeTypeContent(HomeTypeContent.TYPE_AD, adList.get(0)));
|
notifyDataSetChanged();
|
}
|
}
|
}
|
});
|
}
|
} else {
|
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.tv_movie_play_num.setText("112");
|
holder.tv_movie_title.setText(ad.getGdt().getBoundData().getTitle());
|
holder.fl_container.addView(ad.getGdt());
|
} else if (ad.getCsj() != null) {
|
holder.fl_container.addView(holder.adHolder.view);
|
//填充广告内容
|
ArrayList<View> images = new ArrayList<>();
|
if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) {
|
holder.adHolder.iv_pic.setVisibility(View.GONE);
|
holder.adHolder.vv_video.setVisibility(View.VISIBLE);
|
images.add(holder.adHolder.vv_video);
|
} else {
|
holder.adHolder.iv_pic.setVisibility(View.VISIBLE);
|
holder.adHolder.vv_video.setVisibility(View.GONE);
|
images.add(holder.adHolder.iv_pic);
|
}
|
CSJAdUtil.bindData(holder.adHolder.view, holder.adHolder.iv_close, holder.adHolder.tv_title, images, ad.getCsj());
|
holder.tv_movie_title.setText(ad.getCsj().getTitle());
|
}
|
}
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = contentList.size();
|
if (count > maxItemNum)
|
return maxItemNum;
|
else
|
return count % 2 == 0 ? count : count - 1;
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
return this.contentList.get(position).getType();
|
}
|
|
|
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 {
|
|
View view;
|
FrameLayout fl_container;
|
TextView tv_movie_title;
|
TextView tv_movie_play_num;
|
CSJAdHolder adHolder;
|
|
public HomeTypeAdHolder(View view) {
|
super(view);
|
this.view = 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);
|
// adHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column2, null));
|
}
|
|
}
|
|
|
class CSJAdHolder extends RecyclerView.ViewHolder {
|
|
ImageView iv_pic;
|
VideoView vv_video;
|
ImageView iv_logo;
|
TextView tv_title;
|
ImageView iv_close;
|
View view;
|
|
public CSJAdHolder(View view) {
|
super(view);
|
this.view = view;
|
iv_pic = view.findViewById(R.id.iv_pic);
|
vv_video = view.findViewById(R.id.vv_video);
|
iv_logo = view.findViewById(R.id.iv_logo);
|
tv_title = view.findViewById(R.id.tv_title);
|
iv_close = view.findViewById(R.id.iv_close);
|
}
|
|
}
|
|
}
|