| | |
| | | |
| | | 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 androidx.recyclerview.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.RelativeLayout; |
| | | import android.widget.TextView; |
| | | import android.widget.VideoView; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.bumptech.glide.Glide; |
| | | import com.bumptech.glide.load.engine.DiskCacheStrategy; |
| | | import com.bytedance.sdk.openadsdk.TTAdConstant; |
| | | import com.bytedance.sdk.openadsdk.TTFeedAd; |
| | | import com.lcjian.library.util.SystemCommon; |
| | | import com.bumptech.glide.request.RequestOptions; |
| | | import com.bumptech.glide.request.target.DrawableImageViewTarget; |
| | | import com.google.gson.FieldNamingPolicy; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | 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.BasicTextHttpResponseHandler; |
| | | import com.weikou.beibeivideo.BeibeiVideoAPI; |
| | | 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.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.entity.video.holder.FooterViewHolder; |
| | | import com.weikou.beibeivideo.entity.video.holder.HeaderViewHolder; |
| | | import com.weikou.beibeivideo.ui.common.VideosLiveActivity; |
| | | import com.weikou.beibeivideo.ui.discover.StarsActivity; |
| | | import com.weikou.beibeivideo.ui.video.VideoRecommendAdapter; |
| | | import com.weikou.beibeivideo.util.JsonUtil; |
| | | import com.weikou.beibeivideo.util.JumpActivityUtil; |
| | | import com.weikou.beibeivideo.util.ad.ExpressAdManager; |
| | | import com.yeshi.buwanshequ.R; |
| | | import com.weikou.beibeivideo.util.downutil.StringUtils; |
| | | |
| | | import java.text.DecimalFormat; |
| | | import org.apache.http.Header; |
| | | import org.json.JSONArray; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.TreeSet; |
| | | |
| | | import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; |
| | | |
| | | public class RecommendNewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { |
| | | |
| | | private Activity mContext; |
| | | List<RecommendContent> contentList; |
| | | private LayoutInflater inflater; |
| | | private final static String TAG = "RecommendNewAdapter"; |
| | | |
| | | public RecommendNewAdapter(Activity context, List<RecommendContent> contentList) { |
| | | private Activity mContext; |
| | | List<Object> contentList; |
| | | private LayoutInflater inflater; |
| | | private TreeSet mADSet = new TreeSet(); |
| | | |
| | | public final int TYPE_HEADER = 10001; |
| | | public final int TYPE_FOOTER = 10002; |
| | | |
| | | |
| | | |
| | | private View headerView; |
| | | private View footerView; |
| | | |
| | | public void setHeaderView(View view) { |
| | | this.headerView = view; |
| | | } |
| | | |
| | | public void setFooterView(View view) { |
| | | this.footerView = view; |
| | | if (contentList != null) { |
| | | notifyItemChanged(contentList.size() + (headerView != null ? 1 : 0)); |
| | | } |
| | | } |
| | | |
| | | public void removeFooterView() { |
| | | if (footerView != null) { |
| | | notifyItemRemoved(contentList.size() + (headerView != null ? 1 : 0)); |
| | | this.footerView = null; |
| | | } |
| | | } |
| | | |
| | | |
| | | public RecommendNewAdapter(Activity context, List contentList, int recyclerViewWidth) { |
| | | this.mContext = context; |
| | | this.contentList = contentList; |
| | | this.recyclerViewWidth = recyclerViewWidth; |
| | | 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 TYPE_FOOTER: |
| | | return new FooterViewHolder(footerView); |
| | | 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() { |
| | | if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == RecommendContent.TYPE_BANNER) |
| | | if (contentList.get(0).getHomeBannerList() == null || contentList.get(0).getHomeBannerList().size() <= 0) |
| | | return; |
| | | if (viewPager.getCurrentItem() >= contentList.get(0).getHomeBannerList().size() - 1) { |
| | | viewPager.setCurrentItem(0, true); |
| | | } else { |
| | | viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true); |
| | | } |
| | | autoPlayBanner(viewPager); |
| | | } |
| | | }; |
| | | viewPager.postDelayed(autoPlayBanner, 3000); |
| | | } else { |
| | | viewPager.removeCallbacks(autoPlayBanner); |
| | | viewPager.postDelayed(autoPlayBanner, 3000); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | RecyclerView.ItemDecoration itemDecoration = new RecyclerView.ItemDecoration() { |
| | | @Override |
| | | public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { |
| | | super.onDraw(c, parent, state); |
| | | } |
| | | |
| | | @Override |
| | | public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { |
| | | super.onDrawOver(c, parent, state); |
| | | } |
| | | |
| | | @Override |
| | | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { |
| | | super.getItemOffsets(outRect, view, parent, state); |
| | | int index = parent.getChildAdapterPosition(view); |
| | | int total = parent.getAdapter().getItemCount(); |
| | | if (index % 2 == 0) { |
| | | outRect.left = 0; //第一列左边贴边 |
| | | outRect.right = DimenUtils.dipToPixels(5, view.getContext()); |
| | | } else { |
| | | outRect.right = 0; //第一列左边贴边 |
| | | outRect.left = DimenUtils.dipToPixels(5, view.getContext()); |
| | | } |
| | | |
| | | if (index - 1 > 0) { |
| | | outRect.top = DimenUtils.dipToPixels(5, view.getContext()); |
| | | } else |
| | | outRect.top = 0; |
| | | |
| | | if (total % 2 == 0) { |
| | | if (total > 2 && (index < total - 2)) |
| | | outRect.bottom = DimenUtils.dipToPixels(5, view.getContext()); |
| | | else |
| | | outRect.bottom = 0; |
| | | } else { |
| | | if (total > 2 && (index < total - 1)) |
| | | outRect.bottom = DimenUtils.dipToPixels(5, view.getContext()); |
| | | else |
| | | outRect.bottom = 0; |
| | | } |
| | | |
| | | // if (parent.getChildAdapterPosition(view) >= 3) { |
| | | // outRect.top = SizeUtils.dp2px(mContext, 10); |
| | | // } else { |
| | | // outRect.top = 0; |
| | | // } |
| | | } |
| | | }; |
| | | private int recyclerViewWidth = -1; |
| | | |
| | | @Override |
| | | public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { |
| | | final RecommendContent content = contentList.get(i); |
| | | if (viewHolder instanceof HomeBannerHolder) { |
| | | int width = (int) SystemCommon.getScreenWidth(mContext); |
| | | HomeBannerHolder holder = (HomeBannerHolder) viewHolder; |
| | | holder.vp_recommend.setAdapter(new RecommendTopAdapter(content.getHomeBannerList(), mContext, false)); |
| | | holder.indicator_recommend.setScreenWidth(width); |
| | | holder.indicator_recommend.setSelectedColor(holder.vp_recommend.getContext().getResources() |
| | | .getColor(R.color.yellow)); |
| | | holder.indicator_recommend.setUnselectedColor(0xbbADA9A7); |
| | | holder.indicator_recommend.setViewPager(holder.vp_recommend); |
| | | autoPlayBanner(holder.vp_recommend); |
| | | } else if (viewHolder instanceof HomeTypeHolder) { |
| | | HomeType homeType = content.getHomeType(); |
| | | HomeTypeHolder holder = (HomeTypeHolder) viewHolder; |
| | | if (viewHolder instanceof HeaderViewHolder) |
| | | return; |
| | | if (viewHolder instanceof FooterViewHolder) |
| | | 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; |
| | | } |
| | | 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); |
| | | if (homeType.getVideoInfoList() == null) { |
| | | homeType.setVideoInfoList(new ArrayList<>()); |
| | | } |
| | | //统一分为2列 |
| | | ((GridLayoutManager) holder.rv_content.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { |
| | | @Override |
| | | public int getSpanSize(int position) { |
| | | return 2; |
| | | |
| | | |
| | | ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); |
| | | holder.view.setLayoutParams(params); |
| | | //是否为广告 |
| | | if (homeType.getAd() != null) { |
| | | holder.fl_ad.setVisibility(View.VISIBLE); |
| | | holder.fl_content.setVisibility(View.GONE); |
| | | holder.rl_ad.setRatio(homeType.getAd().getPictureRate().floatValue()); |
| | | try { |
| | | Glide.with(mContext).load(homeType.getAd().getPicture()).transition(withCrossFade()) |
| | | .apply(new RequestOptions().placeholder(R.drawable.shape_default_cover).error(R.drawable.shape_default_cover)) |
| | | .into(new DrawableImageViewTarget(holder.iv_ad, true)); |
| | | } catch (IllegalArgumentException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | boolean isFirst = false; |
| | | for (RecommendContent content1 : contentList) |
| | | if (content1.getType() == RecommendContent.TYPE_HOMETYPE) { |
| | | if (content1.getHomeType().getId().equalsIgnoreCase(content.getHomeType().getId())) { |
| | | isFirst = true; |
| | | |
| | | holder.view.setOnClickListener(new OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | |
| | | JumpActivityUtil.jumpPage(mContext, homeType.getAd().getJumpDetail(), homeType.getAd().getParams() != null ? JSONObject.parseObject(homeType.getAd().getParams().replace( |
| | | "\\" + "\"", "\"")) : null); |
| | | } |
| | | break; |
| | | }); |
| | | |
| | | return; |
| | | } |
| | | |
| | | holder.fl_ad.setVisibility(View.GONE); |
| | | holder.fl_content.setVisibility(View.VISIBLE); |
| | | |
| | | |
| | | homeType.getVideoInfoList().clear(); |
| | | int bigPictureIndex = -1; |
| | | if (homeType.getHomeVideoList() != null) |
| | | for (int j = 0; j < homeType.getHomeVideoList().size(); j++) { |
| | | if (homeType.getHomeVideoList().get(j).isBigPicture()) |
| | | bigPictureIndex = j; |
| | | homeType.getVideoInfoList().add(homeType.getHomeVideoList().get(j).getVideo()); |
| | | } |
| | | |
| | | HomeTypeContentAdapter adapter = new HomeTypeContentAdapter(mContext, homeType.getHomeVideoList(), isFirst ? true : false, 8); |
| | | holder.rv_content.setAdapter(adapter); |
| | | //隐藏 |
| | | if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0) |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | else |
| | | holder.view.setVisibility(View.GONE); |
| | | |
| | | //设置间距 |
| | | holder.rv_content.removeItemDecoration(itemDecoration); |
| | | holder.rv_content.addItemDecoration(itemDecoration); |
| | | VideoRecommendAdapter adapter = null; |
| | | |
| | | Glide.with(mContext).load(homeType.getIcon()) |
| | | .diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.drawable.ic_stars_collection).into(holder.tv_category_icon); |
| | | holder.rv_content.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); |
| | | |
| | | |
| | | int contentWidth = recyclerViewWidth - DimenUtils.dip2px(mContext, 16); |
| | | if (homeType.getColumns() > 3) {//第一排为小视频 |
| | | adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), Integer.MAX_VALUE, "recommend", homeType.getName(), null, new ExpressAdManager.IAdShowListener() { |
| | | @Override |
| | | public void show() { |
| | | holder.rv_content.scrollToPosition(0); |
| | | } |
| | | }); |
| | | adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content, contentWidth); |
| | | } else { |
| | | adapter = new VideoRecommendAdapter(mContext, mContext, homeType.getVideoInfoList(), homeType.isNeedAd(), homeType.getColumns(), "recommend", homeType.getName(), null); |
| | | if (homeType.getColumns() == 2) |
| | | adapter.initRecyclerViewDisplayWidthColumn2(holder.rv_content, contentWidth, bigPictureIndex); |
| | | else if (homeType.getColumns() == 3) |
| | | adapter.initRecyclerViewDisplayWidthColumn3(holder.rv_content, contentWidth); |
| | | else |
| | | adapter.initRecyclerViewDisplayWidthRow1(holder.rv_content, contentWidth); |
| | | } |
| | | |
| | | |
| | | if (homeType.getVideoInfoList() != null && homeType.getVideoInfoList().size() > 0) { |
| | | holder.rv_content.setAdapter(adapter); |
| | | } |
| | | |
| | | |
| | | holder.tv_category_name.setText(homeType.getName()); |
| | | |
| | | |
| | | //更多 |
| | | if (Boolean.parseBoolean(homeType.getHasMore())) { |
| | | holder.tv_more.setVisibility(View.VISIBLE); |
| | | if (!StringUtils.isNullOrEmpty(homeType.getMoreTag())) { |
| | | holder.tv_more.setText(homeType.getMoreTag()); |
| | | } else { |
| | | holder.tv_more.setText("更多" + homeType.getName()); |
| | | } |
| | | } else { |
| | | holder.tv_more.setVisibility(View.GONE); |
| | | } |
| | | } else if (viewHolder instanceof AdHolder) { |
| | | AdHolder holder = (AdHolder) viewHolder; |
| | | holder.fl_ad.removeAllViews(); |
| | | ExpressAdContainer ad = content.getAd(); |
| | | |
| | | if (ad != null) { |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | if (ad.getGdt() != null) { |
| | | ViewParent parent = ad.getGdt().getParent(); |
| | | if (parent != null) { |
| | | FrameLayout parentContainer = (FrameLayout) parent; |
| | | parentContainer.removeAllViews(); |
| | | } |
| | | ad.getGdt().render(); |
| | | holder.fl_ad.addView(ad.getGdt()); |
| | | } else if (ad.getCsj() != null) { |
| | | holder.fl_ad.addView(holder.csjAdHolder.view); |
| | | //填充广告内容 |
| | | ArrayList<View> images = new ArrayList<>(); |
| | | if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) { |
| | | holder.csjAdHolder.iv_pic.setVisibility(View.GONE); |
| | | holder.csjAdHolder.vv_video.setVisibility(View.VISIBLE); |
| | | images.add(holder.csjAdHolder.vv_video); |
| | | } else { |
| | | holder.csjAdHolder.iv_pic.setVisibility(View.VISIBLE); |
| | | holder.csjAdHolder.vv_video.setVisibility(View.GONE); |
| | | images.add(holder.csjAdHolder.iv_pic); |
| | | } |
| | | CSJAdUtil.bindData(holder.csjAdHolder.view, holder.csjAdHolder.iv_close, holder.csjAdHolder.tv_title, images, ad.getCsj()); |
| | | int refreshP = homeType.getRefreshPosition(); |
| | | //右上角且有更多选项 |
| | | if (refreshP == 1 && Boolean.parseBoolean(homeType.getHasMore())) { |
| | | refreshP = 2;//移动至下方 |
| | | } |
| | | |
| | | //不足一页不显示刷新 |
| | | if (homeType.getCount() <= homeType.getNumber()) { |
| | | refreshP = 0; |
| | | } |
| | | |
| | | |
| | | switch (refreshP) { |
| | | case 0: |
| | | holder.tv_refresh.setVisibility(View.GONE); |
| | | holder.tv_tag_refresh.setVisibility(View.GONE); |
| | | break; |
| | | |
| | | case 1: |
| | | holder.tv_refresh.setVisibility(View.GONE); |
| | | holder.tv_tag_refresh.setVisibility(View.VISIBLE); |
| | | break; |
| | | |
| | | case 2: |
| | | holder.tv_refresh.setVisibility(View.VISIBLE); |
| | | holder.tv_tag_refresh.setVisibility(View.GONE); |
| | | break; |
| | | } |
| | | //刷新的动作 |
| | | View.OnClickListener refreshListener = new View.OnClickListener() { |
| | | |
| | | |
| | | @Override |
| | | public void onClick(View v) { |
| | | BeibeiVideoAPI.getHomeVideoList(mContext, homeType.getId(), homeType.getCurrentPage() + 1, new BasicTextHttpResponseHandler() { |
| | | @Override |
| | | public void onSuccessPerfect(int statusCode, Header[] headers, org.json.JSONObject jsonObject) throws Exception { |
| | | if (jsonObject.optBoolean("IsPost")) { |
| | | org.json.JSONObject data = jsonObject.optJSONObject("Data"); |
| | | int page = data.optInt("page"); |
| | | homeType.setCurrentPage(page); |
| | | //解析数据 |
| | | homeType.getHomeVideoList().clear(); |
| | | //解析HomeVideo数据 |
| | | int count = data.optInt("count"); |
| | | homeType.setCount(count); |
| | | |
| | | JSONArray homeArray = data |
| | | .optJSONArray("list"); |
| | | List<HomeVideo> homeList = new ArrayList<>(); |
| | | if (homeArray != null && homeArray.length() > 0) { |
| | | for (int j = 0; j < homeArray.length(); j++) { |
| | | homeList.add(JsonUtil.videoGson.fromJson(homeArray |
| | | .optJSONObject(j).toString(), |
| | | HomeVideo.class)); |
| | | } |
| | | } |
| | | |
| | | homeType.getHomeVideoList().clear(); |
| | | homeType.getHomeVideoList().addAll(homeList); |
| | | //改变当前选项 |
| | | notifyItemChanged(i); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | }; |
| | | holder.tv_refresh.setOnClickListener(refreshListener); |
| | | holder.tv_tag_refresh.setOnClickListener(refreshListener); |
| | | |
| | | |
| | | holder.tv_more |
| | | .setOnClickListener(new OnClickListener() { |
| | | |
| | | @Override |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | } 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.view.setVisibility(View.GONE); |
| | | holder.ll_container.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public int getItemCount() { |
| | | return this.contentList.size(); |
| | | int count = this.contentList.size(); |
| | | if (headerView != null) |
| | | count++; |
| | | if (footerView != null) |
| | | count++; |
| | | return count; |
| | | } |
| | | |
| | | /** |
| | |
| | | //获取类型 |
| | | @Override |
| | | public int getItemViewType(int position) { |
| | | return this.contentList.get(position).getType(); |
| | | } |
| | | |
| | | class HomeBannerHolder extends RecyclerView.ViewHolder { |
| | | MyViewPager vp_recommend; |
| | | LinearLayout ll_ad_containner; |
| | | RatioLayout rl_recommend_top; |
| | | LinePageIndicator indicator_recommend; |
| | | FrameLayout fl_ad; |
| | | |
| | | public HomeBannerHolder(View view) { |
| | | super(view); |
| | | vp_recommend = view.findViewById(R.id.vp_recommend); |
| | | ll_ad_containner = view.findViewById(R.id.ll_ad_containner); |
| | | rl_recommend_top = view.findViewById(R.id.rl_recommend_top); |
| | | indicator_recommend = view.findViewById(R.id.indicator_recommend); |
| | | fl_ad = view.findViewById(R.id.fl_ad); |
| | | if (position == 0) { |
| | | if (headerView != null) |
| | | return TYPE_HEADER; |
| | | } |
| | | |
| | | if (headerView != null) |
| | | position--; |
| | | |
| | | if (position >= contentList.size()) |
| | | return TYPE_FOOTER; |
| | | |
| | | if (contentList.get(position) instanceof HomeType) |
| | | return RecommendContent.TYPE_HOMETYPE; |
| | | else |
| | | return RecommendContent.TYPE_AD; |
| | | |
| | | } |
| | | |
| | | class HomeTypeHolder extends RecyclerView.ViewHolder { |
| | | LinearLayout fl_content; |
| | | FrameLayout fl_ad; |
| | | RatioLayout rl_ad; |
| | | TextView tv_category_name; |
| | | ImageView tv_category_icon; |
| | | ImageView iv_ad; |
| | | TextView tv_more; |
| | | RecyclerView rv_content; |
| | | RelativeLayout rl_title_item; |
| | | TextView tv_refresh; |
| | | TextView tv_tag_refresh; |
| | | View view; |
| | | |
| | | public HomeTypeHolder(View convertView, RecyclerView.RecycledViewPool recycledViewPool) { |
| | |
| | | this.view = convertView; |
| | | rl_title_item = convertView |
| | | .findViewById(R.id.rl_title_item); |
| | | |
| | | fl_content = convertView |
| | | .findViewById(R.id.fl_content); |
| | | |
| | | fl_ad = convertView |
| | | .findViewById(R.id.fl_ad); |
| | | |
| | | iv_ad = convertView |
| | | .findViewById(R.id.iv_ad); |
| | | |
| | | rl_ad = convertView |
| | | .findViewById(R.id.rl_ad); |
| | | |
| | | |
| | | tv_category_name = convertView |
| | | .findViewById(R.id.tv_category_name); |
| | | tv_category_icon = convertView |
| | | .findViewById(R.id.tv_category_icon); |
| | | tv_more = convertView |
| | | .findViewById(R.id.tv_more); |
| | | rv_content = convertView |
| | | .findViewById(R.id.rv_content); |
| | | |
| | | tv_refresh = convertView |
| | | .findViewById(R.id.tv_refresh); |
| | | |
| | | tv_tag_refresh = convertView |
| | | .findViewById(R.id.tv_tag_refresh); |
| | | |
| | | |
| | | if (recycledViewPool != null) |
| | | rv_content.setRecycledViewPool(recycledViewPool); |
| | | } |
| | |
| | | class AdHolder extends RecyclerView.ViewHolder { |
| | | |
| | | FrameLayout fl_ad; |
| | | View view; |
| | | CSJAdHolder csjAdHolder; |
| | | RelativeLayout rl_title_item; |
| | | LinearLayout ll_container; |
| | | |
| | | |
| | | public AdHolder(View view) { |
| | | super(view); |
| | | this.view = view; |
| | | csjAdHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column1, null)); |
| | | ll_container = view.findViewById(R.id.ll_container); |
| | | fl_ad = view.findViewById(R.id.fl_ad); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public class HomeTypeContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { |
| | | private Activity mContext; |
| | | private List<HomeTypeContent> contentList; |
| | | private int maxItemNum; |
| | | |
| | | private ExpressAdManager expressAdManager; |
| | | |
| | | private boolean needAd; |
| | | |
| | | |
| | | public HomeTypeContentAdapter(final Activity context, List<HomeVideo> videoList, boolean needAd, int maxItemNum) { |
| | | this.needAd = needAd; |
| | | this.mContext = context; |
| | | if (contentList == null) |
| | | this.contentList = new ArrayList<>(); |
| | | this.contentList.clear(); |
| | | for (HomeVideo hv : videoList) { |
| | | this.contentList.add(new HomeTypeContent(HomeTypeContent.TYPE_CONTENT, hv)); |
| | | } |
| | | |
| | | |
| | | this.maxItemNum = maxItemNum; |
| | | } |
| | | |
| | | @Override |
| | | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) { |
| | | switch (type) { |
| | | case HomeTypeContent.TYPE_AD: |
| | | return new HomeTypeAdHolder(inflater.inflate(R.layout.item_ad_list_small, parent, false)); |
| | | case HomeTypeContent.TYPE_CONTENT: |
| | | return new HomeTypeContentHolder(inflater.inflate(R.layout.item_movie, parent, false)); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int p) { |
| | | final HomeTypeContent content = contentList.get(p); |
| | | if (viewHolder instanceof HomeTypeContentHolder) { |
| | | HomeTypeContentHolder holder = (HomeTypeContentHolder) viewHolder; |
| | | final HomeVideo info = content.getHomeVideo(); |
| | | //设置内容 |
| | | holder.ll_video_show.setVisibility(View.VISIBLE); |
| | | if (StringUtils.isEmpty(info.getPicture())) { |
| | | Glide.with(mContext).load(info.getVideo().getPicture()) |
| | | .placeholder(R.drawable.ic_default_cover) |
| | | .error(R.drawable.ic_default_cover) |
| | | .centerCrop().crossFade() |
| | | .diskCacheStrategy(DiskCacheStrategy.SOURCE) |
| | | .into(holder.iv_movie_cover); |
| | | } else { |
| | | try { |
| | | Glide.with(mContext).load(info.getPicture()) |
| | | .placeholder(R.drawable.ic_default_cover) |
| | | .error(R.drawable.ic_default_cover) |
| | | .centerCrop().crossFade() |
| | | .diskCacheStrategy(DiskCacheStrategy.SOURCE) |
| | | .into(holder.iv_movie_cover); |
| | | } catch (IllegalArgumentException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | holder.tv_movie_title.setText(info.getVideo().getName()); |
| | | holder.tv_movie_rating.setText(StringUtils.isBlank(info |
| | | .getVideo().getTag()) ? "" : info.getVideo() |
| | | .getTag()); |
| | | DecimalFormat df = new DecimalFormat("###.0"); |
| | | holder.tv_movie_play_num.setText(StringUtils.isBlank(info |
| | | .getVideo().getWatchCount()) ? "0" : (Integer.parseInt(info |
| | | .getVideo().getWatchCount())) / 10000 > 0 ? df.format(Integer.parseInt(info |
| | | .getVideo().getWatchCount()) / 10000f) + "万" : info |
| | | .getVideo().getWatchCount()); |
| | | holder.tv_movie_comment_num.setText(StringUtils.isBlank(info.getVideo().getCommentCount()) ? "0" : info.getVideo().getCommentCount()); |
| | | holder.ll_video_show |
| | | .setOnClickListener(new OnClickListener() { |
| | | @Override |
| | | public void onClick(final View v) { |
| | | //跳转到商品视频播放页 |
| | | myClick(info.getVideo(), v); |
| | | } |
| | | }); |
| | | } else if (viewHolder instanceof HomeTypeAdHolder) {//广告 |
| | | final HomeTypeAdHolder holder = (HomeTypeAdHolder) viewHolder; |
| | | holder.fl_container.removeAllViews(); |
| | | final ExpressAdContainer ad = content.getAd(); |
| | | if (ad == null) {//广告为空 |
| | | holder.view.setVisibility(View.GONE); |
| | | if (needAd) { |
| | | if (expressAdManager == null) |
| | | expressAdManager = new ExpressAdManager(ExpressAdManager.SOURCE_CSJ, mContext); |
| | | expressAdManager.loadRecommendSmallAd(new ExpressAdManager.IAdLoadListener() { |
| | | @Override |
| | | public void onSuccess(List<ExpressAdContainer> adList) { |
| | | if (adList != null && adList.size() > 0) { |
| | | if (contentList != null && contentList.size() > 0 && contentList.get(0).getType() == HomeTypeContent.TYPE_CONTENT) { |
| | | contentList.add(0,new HomeTypeContent(HomeTypeContent.TYPE_AD, adList.get(0))); |
| | | notifyDataSetChanged(); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } else { |
| | | holder.view.setVisibility(View.VISIBLE); |
| | | if (ad.getGdt() != null) { |
| | | ViewParent parent = ad.getGdt().getParent(); |
| | | if (parent != null) { |
| | | FrameLayout parentContainer = (FrameLayout) parent; |
| | | parentContainer.removeAllViews(); |
| | | } |
| | | ad.getGdt().render(); |
| | | holder.tv_movie_play_num.setText("112"); |
| | | holder.tv_movie_title.setText(ad.getGdt().getBoundData().getTitle()); |
| | | holder.fl_container.addView(ad.getGdt()); |
| | | } else if (ad.getCsj() != null) { |
| | | holder.fl_container.addView(holder.adHolder.view); |
| | | //填充广告内容 |
| | | ArrayList<View> images = new ArrayList<>(); |
| | | if (ad.getCsj().getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) { |
| | | holder.adHolder.iv_pic.setVisibility(View.GONE); |
| | | holder.adHolder.vv_video.setVisibility(View.VISIBLE); |
| | | images.add(holder.adHolder.vv_video); |
| | | } else { |
| | | holder.adHolder.iv_pic.setVisibility(View.VISIBLE); |
| | | holder.adHolder.vv_video.setVisibility(View.GONE); |
| | | images.add(holder.adHolder.iv_pic); |
| | | } |
| | | CSJAdUtil.bindData(holder.adHolder.view, holder.adHolder.iv_close, holder.adHolder.tv_title, images, ad.getCsj()); |
| | | holder.tv_movie_title.setText(ad.getCsj().getTitle()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public int getItemCount() { |
| | | int count = contentList.size(); |
| | | if (count > maxItemNum) |
| | | return maxItemNum; |
| | | else |
| | | return count % 2 == 0 ? count : count - 1; |
| | | } |
| | | |
| | | @Override |
| | | public int getItemViewType(int position) { |
| | | return this.contentList.get(position).getType(); |
| | | } |
| | | |
| | | |
| | | private void myClick(VideoInfo info, final View v) { |
| | | Intent intent = new Intent(v.getContext(), VideoDetailActivity.class); |
| | | intent.putExtra("video_info", info); |
| | | v.getContext().startActivity(intent); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | class HomeTypeContentHolder extends RecyclerView.ViewHolder { |
| | | LinearLayout ll_video_show; |
| | | ImageView iv_movie_cover; |
| | | ImageView iv_spread; |
| | | TextView tv_movie_rating; |
| | | ImageView iv_ad_logo; |
| | | TextView tv_movie_play_num; |
| | | TextView tv_movie_comment_num; |
| | | TextView tv_movie_title; |
| | | |
| | | public HomeTypeContentHolder(View view) { |
| | | super(view); |
| | | ll_video_show = view.findViewById(R.id.ll_video_show); |
| | | iv_movie_cover = view.findViewById(R.id.iv_movie_cover); |
| | | iv_spread = view.findViewById(R.id.iv_spread); |
| | | tv_movie_rating = view.findViewById(R.id.tv_movie_rating); |
| | | iv_ad_logo = view.findViewById(R.id.iv_ad_logo); |
| | | tv_movie_play_num = view.findViewById(R.id.tv_movie_play_num); |
| | | tv_movie_comment_num = view.findViewById(R.id.tv_movie_comment_num); |
| | | tv_movie_title = view.findViewById(R.id.tv_movie_title); |
| | | } |
| | | } |
| | | |
| | | class HomeTypeAdHolder extends RecyclerView.ViewHolder { |
| | | |
| | | View view; |
| | | FrameLayout fl_container; |
| | | TextView tv_movie_title; |
| | | TextView tv_movie_play_num; |
| | | CSJAdHolder adHolder; |
| | | |
| | | public HomeTypeAdHolder(View view) { |
| | | super(view); |
| | | this.view = view; |
| | | fl_container = view.findViewById(R.id.fl_container); |
| | | tv_movie_title = view.findViewById(R.id.tv_movie_title); |
| | | tv_movie_play_num = view.findViewById(R.id.tv_movie_play_num); |
| | | // adHolder = new CSJAdHolder(inflater.inflate(R.layout.item_ad_csj_list_column2, null)); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | class CSJAdHolder extends RecyclerView.ViewHolder { |
| | | |
| | | ImageView iv_pic; |
| | | VideoView vv_video; |
| | | ImageView iv_logo; |
| | | TextView tv_title; |
| | | ImageView iv_close; |
| | | View view; |
| | | |
| | | public CSJAdHolder(View view) { |
| | | super(view); |
| | | this.view = view; |
| | | iv_pic = view.findViewById(R.id.iv_pic); |
| | | vv_video = view.findViewById(R.id.vv_video); |
| | | iv_logo = view.findViewById(R.id.iv_logo); |
| | | tv_title = view.findViewById(R.id.tv_title); |
| | | iv_close = view.findViewById(R.id.iv_close); |
| | | rl_title_item = view.findViewById(R.id.rl_title_item); |
| | | } |
| | | |
| | | } |