| | |
| | | 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.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.TTAdDislike; |
| | | 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.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.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; |
| | | 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; |
| | | List<RecommendContent> contentList; |
| | | private LayoutInflater inflater; |
| | | |
| | | public RecommendNewAdapter(Activity context, List<HomeType> homeTypeList, List<HomeAd> homeAdList) { |
| | | public RecommendNewAdapter(Activity context, List<RecommendContent> contentList) { |
| | | this.mContext = context; |
| | | this.homeTypeList = homeTypeList; |
| | | this.homeAdList = homeAdList; |
| | | this.contentList = contentList; |
| | | 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: |
| | | case RecommendContent.TYPE_BANNER: |
| | | return new HomeBannerHolder(inflater.inflate(R.layout.recommend_top, parent, false)); |
| | | case TYPE_HOME_TYPE: |
| | | case RecommendContent.TYPE_HOMETYPE: |
| | | return new HomeTypeHolder(inflater.inflate(R.layout.item_recommend_home_type, null, false), new RecyclerView.RecycledViewPool()); |
| | | case TYPE_HOME_AD: |
| | | case RecommendContent.TYPE_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; |
| | | |
| | |
| | | autoPlayBanner = new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if (homeAdList == null || homeAdList.size() <= 0) |
| | | return; |
| | | if (viewPager.getCurrentItem() >= homeAdList.size() - 1) { |
| | | 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); |
| | |
| | | |
| | | @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(homeAdList, mContext, false)); |
| | | 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.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); |
| | | 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); |
| | |
| | | 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(), position == 0 ? firstAd : null, 8); |
| | | HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), isFirst ? true : false, 8); |
| | | holder.rv_content.setAdapter(adapter); |
| | | |
| | | //设置间距 |
| | |
| | | } 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); |
| | | } |
| | | } |
| | | ExpressAdContainer ad = content.getAd(); |
| | | |
| | | if (ad != null) { |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | if (ad.getGdt() != null) { |
| | | ViewParent parent= ad.getGdt().getParent(); |
| | | if(parent!=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(); |
| | | 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); |
| | | } |
| | | 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()); |
| | | CSJAdUtil.bindData(holder.csjAdHolder.view, holder.csjAdHolder.iv_close, holder.csjAdHolder.tv_title, images, ad.getCsj()); |
| | | } |
| | | }else{ |
| | | } 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; |
| | | return this.contentList.size(); |
| | | } |
| | | |
| | | /** |
| | |
| | | //获取类型 |
| | | @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; |
| | | } |
| | | } |
| | | return this.contentList.get(position).getType(); |
| | | } |
| | | |
| | | class HomeBannerHolder extends RecyclerView.ViewHolder { |
| | |
| | | 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 |
| | |
| | | |
| | | FrameLayout fl_ad; |
| | | View view; |
| | | CSJAdHolder csjAdHolder; |
| | | |
| | | |
| | | public AdHolder(View view) { |
| | | super(view); |
| | | this.view=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<ExpressAdContainer> adList; |
| | | private List<HomeVideo> homeVideoList; |
| | | private List<HomeTypeContent> contentList; |
| | | private int maxItemNum; |
| | | |
| | | private final int TYPE_CONTENT = 1; |
| | | private final int TYPE_AD = 0; |
| | | private ExpressAdManager expressAdManager; |
| | | |
| | | private boolean needAd; |
| | | |
| | | |
| | | public HomeTypeContentAdapter(Activity context, List<HomeVideo> homeVideoList, ExpressAdContainer ad, int maxItemNum) { |
| | | public HomeTypeContentAdapter(final Activity context, List<HomeVideo> videoList, boolean needAd, int maxItemNum) { |
| | | this.needAd = needAd; |
| | | this.mContext = context; |
| | | this.homeVideoList = homeVideoList; |
| | | if (adList == null) |
| | | adList = new ArrayList<>(); |
| | | adList.clear(); |
| | | if (ad != null) |
| | | adList.add(ad); |
| | | 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 TYPE_AD: |
| | | case HomeTypeContent.TYPE_AD: |
| | | return new HomeTypeAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false)); |
| | | case TYPE_CONTENT: |
| | | 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; |
| | | int position = p; |
| | | if (adList != null && adList.size() > 0) { |
| | | position -= 1; |
| | | } |
| | | if (position >= homeVideoList.size()) |
| | | return; |
| | | final HomeVideo info = homeVideoList.get(position); |
| | | final HomeVideo info = content.getHomeVideo(); |
| | | //设置内容 |
| | | holder.ll_video_show.setVisibility(View.VISIBLE); |
| | | if (StringUtils.isEmpty(info.getPicture())) { |
| | |
| | | } |
| | | }); |
| | | } else if (viewHolder instanceof HomeTypeAdHolder) {//广告 |
| | | HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder; |
| | | final 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(); |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | 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(); |
| | | } 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()); |
| | | } |
| | | 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(); |
| | | int count = contentList.size(); |
| | | if (count > maxItemNum) |
| | | return maxItemNum; |
| | | else |
| | |
| | | |
| | | @Override |
| | | public int getItemViewType(int position) { |
| | | if (position == 0 && adList.size() > 0) |
| | | return TYPE_AD; |
| | | else |
| | | return TYPE_CONTENT; |
| | | return this.contentList.get(position).getType(); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | 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); |
| | | } |
| | | |
| | | } |