admin
2020-10-10 8039a1b2fbfa3471b6f726d3e839d7867c81a84f
BuWanVideo/src/com/weikou/beibeivideo/ui/recommend/RecommendNewAdapter.java
@@ -2,17 +2,12 @@
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;
@@ -20,17 +15,13 @@
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;
@@ -39,37 +30,111 @@
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:
@@ -79,142 +144,71 @@
    }
    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);
@@ -260,92 +254,10 @@
        } 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();
                    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);
            }
@@ -354,7 +266,10 @@
    @Override
    public int getItemCount() {
        return this.contentList.size();
        int count = this.contentList.size();
        if (headerView != null)
            count++;
        return count;
    }
    /**
@@ -366,24 +281,17 @@
    //获取类型
    @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 {
@@ -491,33 +399,33 @@
                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() {