| | |
| | | |
| | | 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.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.bytedance.sdk.openadsdk.TTNativeExpressAd; |
| | | import com.google.gson.FieldNamingPolicy; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | 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.R; |
| | | import com.weikou.beibeivideo.entity.HomeType; |
| | | import com.weikou.beibeivideo.entity.HomeVideo; |
| | | import com.weikou.beibeivideo.entity.VideoInfo; |
| | |
| | | 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.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 com.yeshi.buwanshequ.R; |
| | | |
| | | import java.text.DecimalFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.TreeSet; |
| | | |
| | | public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { |
| | | |
| | | private final static String TAG = "RecommendNewAdapter"; |
| | | |
| | | private Activity mContext; |
| | | List<RecommendContent> contentList; |
| | | List<Object> contentList; |
| | | private LayoutInflater inflater; |
| | | private TreeSet mADSet = new TreeSet(); |
| | | |
| | | public RecommendNewAdapter(Activity context, List<RecommendContent> contentList) { |
| | | 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.contentList = contentList; |
| | | inflater = LayoutInflater.from(mContext); |
| | | } |
| | | |
| | | /** |
| | | * 添加数据项 |
| | | * |
| | | * @param item |
| | | */ |
| | | public void addNormalItem(HomeType item) { |
| | | contentList.add(item); |
| | | } |
| | | |
| | | /** |
| | | * 获取广告数量 |
| | | * |
| | | * @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 RecommendContent.TYPE_BANNER: |
| | | return new HomeBannerHolder(inflater.inflate(R.layout.recommend_top, parent, false)); |
| | | 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 RecommendContent.TYPE_AD: |
| | |
| | | } |
| | | |
| | | |
| | | private Runnable autoPlayBanner = null; |
| | | |
| | | private synchronized void autoPlayBanner(final ViewPager viewPager) { |
| | | |
| | | if (autoPlayBanner == null) { |
| | | autoPlayBanner = new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | 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); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | } |
| | | }; |
| | | 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; |
| | | if (holder.vp_recommend.getAdapter() != null) { |
| | | holder.vp_recommend.getAdapter().notifyDataSetChanged(); |
| | | // if (holder.vp_recommend.getAdapter().getCount() > 0) |
| | | // holder.vp_recommend.setCurrentItem(0); |
| | | } else { |
| | | 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) { |
| | | final HomeType homeType = content.getHomeType(); |
| | | HomeTypeHolder holder = (HomeTypeHolder) viewHolder; |
| | | 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; |
| | | } |
| | | 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()); |
| | | } |
| | | |
| | | 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())) { |
| | | for (Object content1 : contentList) |
| | | if (content1 instanceof HomeType) { |
| | | if (content1 == homeType) { |
| | | isFirst = true; |
| | | break; |
| | | } else { |
| | | isFirst = false; |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | |
| | | HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), isFirst ? true : false, 8); |
| | | holder.rv_content.setAdapter(adapter); |
| | | VideoColumn2Adapter adapter = null; |
| | | |
| | | //设置间距 |
| | | holder.rv_content.removeItemDecoration(itemDecoration); |
| | | holder.rv_content.addItemDecoration(itemDecoration); |
| | | 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 if (viewHolder instanceof AdHolder) { |
| | | final AdHolder holder = (AdHolder) viewHolder; |
| | | holder.fl_ad.removeAllViews(); |
| | | final ExpressAdContainer ad = content.getAd(); |
| | | |
| | | final ExpressAdContainer ad = (ExpressAdContainer) contentList.get(p); |
| | | if (ad != null) { |
| | | holder.ll_container.setVisibility(View.VISIBLE); |
| | | if (ad.getGdt() != null) { |
| | | // ad.getGdt().setAdEventListener(new AdEventListener() { |
| | | // @Override |
| | | // public void onClick() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onExposed() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onRenderSuccess() { |
| | | // holder.fl_ad.addView(ad.getGdt().getAdView()); |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onRenderFail() { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onAdClosed() { |
| | | // ad.getGdt().destroy(); |
| | | // contentList.remove(content); |
| | | // notifyDataSetChanged(); |
| | | // } |
| | | // }); |
| | | ad.getGdt().render(); |
| | | if (ad.getGdt().getParent() != null) { |
| | | ViewGroup viewGroup = (ViewGroup) (ad.getGdt().getParent()); |
| | | viewGroup.removeAllViews(); |
| | | } |
| | | |
| | | 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().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().setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() { |
| | | |
| | | @Override |
| | | public void onAdClicked(View view, int i) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onAdShow(View view, int i) { |
| | | Log.i(TAG, "onAdShow"); |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderFail(View view, String s, int i) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess(View view, float v, float v1) { |
| | | // holder.rl_title_item.setVisibility(View.VISIBLE); |
| | | Log.i(TAG, "onRenderSuccess"); |
| | | // holder.rl_title_item.setVisibility(View.VISIBLE); |
| | | } |
| | | }); |
| | | |
| | | ad.getCsj().render(); |
| | | holder.fl_ad.addView(ad.getCsj().getExpressAdView()); |
| | | } |
| | | ExpressAdManager.fillAd(ad, holder.fl_ad); |
| | | } else { |
| | | holder.ll_container.setVisibility(View.GONE); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public int getItemCount() { |
| | | return this.contentList.size(); |
| | | int count = this.contentList.size(); |
| | | if (headerView != null) |
| | | count++; |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | |
| | | //获取类型 |
| | | @Override |
| | | public int getItemViewType(int position) { |
| | | return this.contentList.get(position).getType(); |
| | | } |
| | | |
| | | class HomeBannerHolder extends RecyclerView.ViewHolder { |
| | | ViewPager 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 (position == 0) { |
| | | if (headerView != null) |
| | | return TYPE_HEADER; |
| | | } |
| | | |
| | | if (headerView != null) |
| | | position--; |
| | | if (contentList.get(position) instanceof HomeType) |
| | | return RecommendContent.TYPE_HOMETYPE; |
| | | else |
| | | return RecommendContent.TYPE_AD; |
| | | } |
| | | |
| | | class HomeTypeHolder extends RecyclerView.ViewHolder { |
| | |
| | | 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(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() { |