| | |
| | | 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.util.Log; |
| | | 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.TextView; |
| | | |
| | | import com.bumptech.glide.Glide; |
| | | import com.bumptech.glide.load.engine.DiskCacheStrategy; |
| | | import com.bumptech.glide.request.RequestOptions; |
| | | import com.bytedance.sdk.openadsdk.TTAdDislike; |
| | | import com.lcjian.library.util.SystemCommon; |
| | | import com.lcjian.library.util.common.DimenUtils; |
| | | import com.google.gson.FieldNamingPolicy; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | 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.R; |
| | | import com.weikou.beibeivideo.entity.HomeType; |
| | | import com.weikou.beibeivideo.entity.HomeVideo; |
| | | import com.weikou.beibeivideo.entity.VideoInfo; |
| | | import com.weikou.beibeivideo.entity.VideoType; |
| | | import com.weikou.beibeivideo.entity.ad.ExpressAdContainer; |
| | | import com.weikou.beibeivideo.test.MyViewPager; |
| | | import com.weikou.beibeivideo.entity.recommend.HomeTypeContent; |
| | | import com.weikou.beibeivideo.entity.recommend.RecommendContent; |
| | | import com.weikou.beibeivideo.entity.recommend.holder.RecommendVideoAdHolder; |
| | | import com.weikou.beibeivideo.entity.video.holder.HeaderViewHolder; |
| | | import com.weikou.beibeivideo.entity.video.holder.VideoHolder; |
| | | import com.weikou.beibeivideo.ui.common.VideosLiveActivity; |
| | | import com.weikou.beibeivideo.ui.discover.StarsActivity; |
| | | import com.weikou.beibeivideo.ui.media.VideoDetailActivity; |
| | | import com.yeshi.buwanshequ.R; |
| | | import com.weikou.beibeivideo.ui.video.VideoColumn2Adapter; |
| | | import com.weikou.beibeivideo.util.VideoUtil; |
| | | import com.weikou.beibeivideo.util.ad.AdUtil; |
| | | import com.weikou.beibeivideo.util.ad.ExpressAdManager; |
| | | |
| | | import java.text.DecimalFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.TreeSet; |
| | | |
| | | public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { |
| | | |
| | | //广告Container |
| | | private ExpressAdContainer firstAd; |
| | | private List<ExpressAdContainer> bigImgAdList;//大图广告列表 |
| | | private final static String TAG = "RecommendNewAdapter"; |
| | | |
| | | 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<Object> contentList; |
| | | private LayoutInflater inflater; |
| | | private TreeSet mADSet = new TreeSet(); |
| | | |
| | | public RecommendNewAdapter(Activity context, List<HomeType> homeTypeList, List<HomeAd> homeAdList) { |
| | | public final int TYPE_HEADER = 10001; |
| | | |
| | | private View headerView; |
| | | |
| | | public void setHeaderView(View view) { |
| | | this.headerView = view; |
| | | } |
| | | |
| | | public RecommendNewAdapter(Activity context, List 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; |
| | | /** |
| | | * 添加数据项 |
| | | * |
| | | * @param item |
| | | */ |
| | | public void addNormalItem(HomeType item) { |
| | | contentList.add(item); |
| | | } |
| | | |
| | | public void setFirstAd(ExpressAdContainer firstAd) { |
| | | this.firstAd = firstAd; |
| | | /** |
| | | * 获取广告数量 |
| | | * |
| | | * @return |
| | | */ |
| | | public int getAdCount() { |
| | | return mADSet.size(); |
| | | } |
| | | |
| | | /** |
| | | * 添加广告到指定位置 |
| | | * |
| | | * @param ad |
| | | * @param position |
| | | */ |
| | | public void addAdToPosition(ExpressAdContainer ad, int position) { |
| | | if (position >= 0 && position < contentList.size()) { |
| | | contentList.add(position, ad); |
| | | mADSet.add(position); |
| | | } |
| | | Log.i(TAG, "addAdToPosition"); |
| | | } |
| | | |
| | | public void addAd(ExpressAdContainer ad) { |
| | | contentList.add(ad); |
| | | Log.i(TAG, "addAd"); |
| | | } |
| | | |
| | | public void removeAd(ExpressAdContainer ad) { |
| | | if (mADSet != null) |
| | | for (Iterator<Integer> its = mADSet.iterator(); its.hasNext(); ) { |
| | | int p = its.next(); |
| | | if (p < contentList.size() && contentList.get(p) == ad) { |
| | | mADSet.remove(p); |
| | | contentList.remove(p); |
| | | notifyDataSetChanged(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | public void removeAllAd() { |
| | | if (contentList != null) |
| | | for (int i = 0; i < contentList.size(); i++) { |
| | | if (contentList.get(i) instanceof ExpressAdContainer) { |
| | | contentList.remove(i); |
| | | i--; |
| | | } |
| | | } |
| | | mADSet.clear(); |
| | | } |
| | | |
| | | @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: |
| | | case TYPE_HEADER: |
| | | return new HeaderViewHolder(headerView); |
| | | 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; |
| | | |
| | | 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()) |
| | | if (viewHolder instanceof HeaderViewHolder) |
| | | return; |
| | | int p = i; |
| | | if (headerView != null) |
| | | p--; |
| | | |
| | | |
| | | if (viewHolder instanceof HomeTypeHolder) { |
| | | final HomeType homeType = (HomeType) contentList.get(p); |
| | | |
| | | final HomeTypeHolder holder = (HomeTypeHolder) viewHolder; |
| | | if (homeType == null) { |
| | | holder.view.setVisibility(View.GONE); |
| | | 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; |
| | | if (homeType.getVideoInfoList() == null) { |
| | | homeType.setVideoInfoList(new ArrayList<VideoInfo>()); |
| | | } |
| | | homeType.getVideoInfoList().clear(); |
| | | if (homeType.getHomeVideoList() != null) |
| | | for (HomeVideo hv : homeType.getHomeVideoList()) { |
| | | homeType.getVideoInfoList().add(hv.getVideo()); |
| | | } |
| | | }); |
| | | |
| | | HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), position == 0 ? firstAd : null, 8); |
| | | holder.rv_content.setAdapter(adapter); |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | |
| | | //设置间距 |
| | | holder.rv_content.removeItemDecoration(itemDecoration); |
| | | holder.rv_content.addItemDecoration(itemDecoration); |
| | | boolean isFirst = false; |
| | | for (Object content1 : contentList) |
| | | if (content1 instanceof HomeType) { |
| | | if (content1 == homeType) { |
| | | isFirst = true; |
| | | break; |
| | | } else { |
| | | isFirst = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | VideoColumn2Adapter adapter = null; |
| | | |
| | | if (isFirst) {//第一排为小视频 |
| | | adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), true, Integer.MAX_VALUE, null, new ExpressAdManager.IAdShowListener() { |
| | | @Override |
| | | public void show() { |
| | | holder.rv_content.scrollToPosition(0); |
| | | } |
| | | }); |
| | | adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content); |
| | | } else { |
| | | adapter = new VideoColumn2Adapter(mContext, mContext, homeType.getVideoInfoList(), false, homeType.getColumns(), null); |
| | | if (homeType.getColumns() == 2) |
| | | adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content); |
| | | else if (homeType.getColumns() == 3) |
| | | adapter.initRecyclerViewDisplayWidthColumn3(holder.rv_content); |
| | | else |
| | | adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content); |
| | | } |
| | | if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0) |
| | | holder.rv_content.setAdapter(adapter); |
| | | |
| | | |
| | | Glide.with(mContext).load(homeType.getIcon()) |
| | | .diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.drawable.ic_stars_collection).into(holder.tv_category_icon); |
| | | .apply(new RequestOptions().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() { |
| | | holder.tv_more |
| | | .setOnClickListener(new OnClickListener() { |
| | | |
| | | @Override |
| | | public void onSelected(int i, String s) { |
| | | bigImgAdList.remove(adTemp); |
| | | notifyDataSetChanged(); |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRefuse() { |
| | | |
| | | public void onClick(View v) { |
| | | Intent intent = null; |
| | | if (homeType.getId().equalsIgnoreCase("1111")) { |
| | | intent = new Intent(v.getContext(), |
| | | VideosLiveActivity.class); |
| | | intent.putExtra("home_type", homeType.getId()); |
| | | intent.putExtra("title", homeType.getName()); |
| | | v.getContext().startActivity(intent); |
| | | } else if (homeType.getId().equalsIgnoreCase("9998")) { |
| | | intent = new Intent(v.getContext(), StarsActivity.class); |
| | | v.getContext().startActivity(intent); |
| | | } else { |
| | | Gson gson = new GsonBuilder() |
| | | .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) |
| | | .create(); |
| | | VideoType type = gson.fromJson(homeType.getParams().replace( |
| | | "\\" + "\"", "\""), VideoType.class); |
| | | try { |
| | | intent = new Intent(v.getContext(), Class.forName(homeType.getActivity())); |
| | | intent.putExtra("video_type", type); |
| | | intent.putExtra("type_name", type.getName()); |
| | | intent.putExtra("isPush", false); |
| | | v.getContext().startActivity(intent); |
| | | } catch (ClassNotFoundException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | holder.fl_ad.addView(ad.getCsj().getExpressAdView()); |
| | | } |
| | | }else{ |
| | | holder.view.setVisibility(View.GONE); |
| | | |
| | | |
| | | } else if (viewHolder instanceof AdHolder) { |
| | | final AdHolder holder = (AdHolder) viewHolder; |
| | | holder.fl_ad.removeAllViews(); |
| | | final ExpressAdContainer ad = (ExpressAdContainer) contentList.get(p); |
| | | if (ad != null) { |
| | | holder.ll_container.setVisibility(View.VISIBLE); |
| | | ExpressAdManager.fillAd(ad, holder.fl_ad); |
| | | } else { |
| | | holder.ll_container.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(); |
| | | int count = this.contentList.size(); |
| | | if (headerView != null) |
| | | count++; |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | @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; |
| | | } |
| | | if (headerView != null) |
| | | return TYPE_HEADER; |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | if (headerView != null) |
| | | position--; |
| | | if (contentList.get(position) instanceof HomeType) |
| | | return RecommendContent.TYPE_HOMETYPE; |
| | | else |
| | | return RecommendContent.TYPE_AD; |
| | | } |
| | | |
| | | class HomeTypeHolder 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 |
| | |
| | | class AdHolder extends RecyclerView.ViewHolder { |
| | | |
| | | FrameLayout fl_ad; |
| | | View view; |
| | | RelativeLayout rl_title_item; |
| | | LinearLayout ll_container; |
| | | |
| | | |
| | | public AdHolder(View view) { |
| | | super(view); |
| | | this.view=view; |
| | | ll_container = view.findViewById(R.id.ll_container); |
| | | fl_ad = view.findViewById(R.id.fl_ad); |
| | | rl_title_item = view.findViewById(R.id.rl_title_item); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | 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)); |
| | | } |
| | | |
| | | |
| | | if (needAd) { |
| | | if (expressAdManager == null) |
| | | expressAdManager = new ExpressAdManager(AdUtil.getSmallExpressAdType(), 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(); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | 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)); |
| | | case HomeTypeContent.TYPE_AD: |
| | | return new RecommendVideoAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false)); |
| | | case HomeTypeContent.TYPE_CONTENT: |
| | | return new VideoHolder(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); |
| | | final HomeTypeContent content = contentList.get(p); |
| | | if (viewHolder instanceof VideoHolder) { |
| | | VideoHolder holder = (VideoHolder) 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) |
| | | .apply(new RequestOptions().centerCrop().placeholder(R.drawable.ic_default_cover).error(R.drawable.ic_default_cover)) |
| | | .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) |
| | | .apply(new RequestOptions().centerCrop().placeholder(R.drawable.ic_default_cover).error(R.drawable.ic_default_cover)) |
| | | .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 |
| | | |
| | | String tag = StringUtils.isBlank(info |
| | | .getVideo().getTag()) ? "" : info.getVideo() |
| | | .getTag()); |
| | | .getTag(); |
| | | holder.tv_movie_rating.setText(tag); |
| | | if (StringUtils.isBlank(tag)) { |
| | | holder.tv_movie_rating.setVisibility(View.GONE); |
| | | } else { |
| | | holder.tv_movie_rating.setVisibility(View.VISIBLE); |
| | | } |
| | | |
| | | |
| | | 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_play_num.setText(VideoUtil.getWatchCountShortName(info.getVideo().getWatchCount())); |
| | | holder.tv_movie_play_num.setVisibility(View.GONE); |
| | | holder.tv_movie_comment_num.setText(StringUtils.isBlank(info.getVideo().getCommentCount()) ? "0" : info.getVideo().getCommentCount()); |
| | | holder.ll_video_show |
| | | .setOnClickListener(new OnClickListener() { |
| | |
| | | myClick(info.getVideo(), v); |
| | | } |
| | | }); |
| | | } else if (viewHolder instanceof HomeTypeAdHolder) {//广告 |
| | | HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder; |
| | | } else if (viewHolder instanceof RecommendVideoAdHolder) {//广告 |
| | | final RecommendVideoAdHolder holder = (RecommendVideoAdHolder) 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); |
| | | } else { |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | if (ad.getGdt() != null) { |
| | | holder.rl_container.setRatio(0.88f); |
| | | holder.tv_movie_title.setVisibility(View.GONE); |
| | | // ad.getGdt().setAdEventListener(new AdEventListener() { |
| | | // @Override |
| | | // public void onClick() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onExposed() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onRenderSuccess() { |
| | | // holder.fl_container.addView(ad.getGdt().getAdView()); |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onRenderFail() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onAdClosed() { |
| | | // ad.getGdt().destroy(); |
| | | // contentList.remove(content); |
| | | // notifyDataSetChanged(); |
| | | // } |
| | | // }); |
| | | ad.getGdt().render(); |
| | | holder.fl_container.addView(ad.getGdt()); |
| | | holder.tv_movie_play_num.setText("112"); |
| | | } else if (ad.getCsj() != null) { |
| | | holder.rl_container.setRatio(0.88f); |
| | | holder.tv_movie_title.setVisibility(View.GONE); |
| | | ad.getCsj().setDislikeCallback(mContext, new TTAdDislike.DislikeInteractionCallback() { |
| | | |
| | | @Override |
| | | public void onSelected(int i, String s) { |
| | | contentList.remove(content); |
| | | notifyDataSetChanged(); |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRefuse() { |
| | | |
| | | } |
| | | }); |
| | | ad.getCsj().render(); |
| | | holder.fl_container.addView(ad.getCsj().getExpressAdView()); |
| | | } |
| | | |
| | | 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(); |
| | | 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(); |
| | | } |
| | | |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |