package com.atguigu.mobileplayer1020.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.atguigu.mobileplayer1020.R; import com.atguigu.mobileplayer1020.bean.NetAudioBean; import com.atguigu.mobileplayer1020.utils.Constant; import com.atguigu.mobileplayer1020.utils.Utils; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.xutils.common.util.DensityUtil; import org.xutils.image.ImageOptions; import org.xutils.x; import java.util.List; import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer; import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard; /** * 作者:尚硅谷-杨光福 on 2017/1/18 09:35 * 微信:yangguangfu520 * QQ号:541433511 * 作用:xxxx */ public class NetAudioFragmentAdapter extends BaseAdapter { private final Context mContext; private final List<NetAudioBean.ListBean> listDatas; /** * 视频 */ private static final int TYPE_VIDEO = 0; /** * 图片 */ private static final int TYPE_IMAGE = 1; /** * 文字 */ private static final int TYPE_TEXT = 2; /** * GIF图片 */ private static final int TYPE_GIF = 3; /** * 软件推广 */ private static final int TYPE_AD = 4; public NetAudioFragmentAdapter(Context mContext, List<NetAudioBean.ListBean> listDatas) { this.mContext = mContext; this.listDatas = listDatas; } /** * 得到列表的总数 * @return */ @Override public int getCount() { return listDatas.size(); } /* 根据位置得到当前Item的类型--系统提供 */ @Override public int getItemViewType(int position) { String type = listDatas.get(position).getType();//video,gif,image,text,ad int itemViewType = TYPE_VIDEO; if ("video".equals(type)) { itemViewType = TYPE_VIDEO; } else if ("image".equals(type)) { itemViewType = TYPE_IMAGE; } else if ("text".equals(type)) { itemViewType = TYPE_TEXT; } else if ("gif".equals(type)) { itemViewType = TYPE_GIF; } else { itemViewType = TYPE_AD;//广播 } return itemViewType; } /** * 得到类型总数 --系统 * @return */ @Override public int getViewTypeCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //根据位置得到不同类型 int itemViewType = getItemViewType(position); //取出不同的数据 NetAudioBean.ListBean listBean = listDatas.get(position); convertView = initView(convertView, itemViewType, listBean); return convertView; } /** * * @param convertView 缓存的视图 * @param itemViewType 类型 * @param mediaItem 数据 * @return */ private View initView(View convertView, int itemViewType, NetAudioBean.ListBean mediaItem) { switch (itemViewType) { case TYPE_VIDEO://视频 VideoHoder videoHoder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.all_video_item, null); videoHoder = new VideoHoder(convertView); convertView.setTag(videoHoder); } else { videoHoder = (VideoHoder) convertView.getTag(); } //设置数据 videoHoder.setData(mediaItem); break; case TYPE_IMAGE://图片 ImageHolder imageHolder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.all_image_item, null); imageHolder = new ImageHolder(convertView); convertView.setTag(imageHolder); } else { imageHolder = (ImageHolder) convertView.getTag(); } //设置数据 imageHolder.setData(mediaItem); break; case TYPE_TEXT://文字 TextHolder textHolder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.all_text_item, null); textHolder = new TextHolder(convertView); convertView.setTag(textHolder); } else { textHolder = (TextHolder) convertView.getTag(); } textHolder.setData(mediaItem); break; case TYPE_GIF://gif GifHolder gifHolder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.all_gif_item, null); gifHolder = new GifHolder(convertView); convertView.setTag(gifHolder); } else { gifHolder = (GifHolder) convertView.getTag(); } gifHolder.setData(mediaItem); break; case TYPE_AD://软件广告 ADHolder adHolder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.all_ad_item, null); adHolder = new ADHolder(convertView); convertView.setTag(adHolder); } else { adHolder = (ADHolder) convertView.getTag(); } break; } return convertView; } /** * 公共的BaseViewHolder,初始化公共部分的布局 * 绑定公共部分的数据 */ class BaseViewHolder{ ImageView ivHeadpic; TextView tvName; TextView tvTimeRefresh; ImageView ivRightMore; ImageView ivVideoKind; TextView tvVideoKindText; TextView tvShenheDingNumber; TextView tvShenheCaiNumber; TextView tvPostsNumber; LinearLayout llDownload; public BaseViewHolder (View convertView) { //公共的 ivHeadpic = (ImageView) convertView.findViewById(R.id.iv_headpic); tvName = (TextView) convertView.findViewById(R.id.tv_name); tvTimeRefresh = (TextView) convertView.findViewById(R.id.tv_time_refresh); ivRightMore = (ImageView) convertView.findViewById(R.id.iv_right_more); //bottom ivVideoKind = (ImageView) convertView.findViewById(R.id.iv_video_kind); tvVideoKindText = (TextView) convertView.findViewById(R.id.tv_video_kind_text); tvShenheDingNumber = (TextView) convertView.findViewById(R.id.tv_shenhe_ding_number); tvShenheCaiNumber = (TextView) convertView.findViewById(R.id.tv_shenhe_cai_number); tvPostsNumber = (TextView) convertView.findViewById(R.id.tv_posts_number); llDownload = (LinearLayout) convertView.findViewById(R.id.ll_download); } /** * 设置公共部分的数据 * @param mediaItem */ public void setData(NetAudioBean.ListBean mediaItem) { //设置头像 if (mediaItem.getU() != null && mediaItem.getU().getHeader() != null && mediaItem.getU().getHeader().get(0) != null) { x.image().bind(ivHeadpic, Constant.BASE_URL+mediaItem.getU().getHeader().get(0)); } //设置文本 if (mediaItem.getU() != null && mediaItem.getU().getName() != null) { tvName.setText(mediaItem.getU().getName() + ""); } tvTimeRefresh.setText(mediaItem.getPasstime()); //设置标签 List<NetAudioBean.ListBean.TagsBean> tagsEntities = mediaItem.getTags(); if (tagsEntities != null && tagsEntities.size() > 0) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < tagsEntities.size(); i++) { buffer.append(tagsEntities.get(i).getName() + " "); } tvVideoKindText.setText(buffer.toString()); } //设置点赞,踩,转发 tvShenheDingNumber.setText(mediaItem.getUp()); tvShenheCaiNumber.setText(mediaItem.getDown() + ""); tvPostsNumber.setText(mediaItem.getForward() + ""); } } class VideoHoder extends BaseViewHolder{ Utils utils; TextView tvContext; JCVideoPlayerStandard jcvVideoplayer; TextView tvPlayNums; TextView tvVideoDuration; ImageView ivCommant; TextView tvCommantContext; VideoHoder(View convertView) { super(convertView); //中间公共部分 -所有的都有 tvContext = (TextView) convertView.findViewById(R.id.tv_context); utils = new Utils(); tvPlayNums = (TextView) convertView.findViewById(R.id.tv_play_nums); tvVideoDuration = (TextView) convertView.findViewById(R.id.tv_video_duration); ivCommant = (ImageView) convertView.findViewById(R.id.iv_commant); tvCommantContext = (TextView) convertView.findViewById(R.id.tv_commant_context); jcvVideoplayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.jcv_videoplayer); } public void setData(NetAudioBean.ListBean mediaItem) { super.setData(mediaItem); //设置文本-所有的都有,只有广告没有哦 tvContext.setText(mediaItem.getText() + "_" + mediaItem.getType()); //视频特有的------------------------ //第一个参数是视频播放地址,第二个参数是显示封面的地址,第三参数是标题 boolean setUp = jcvVideoplayer.setUp( Constant.BASE_URL+mediaItem.getVideo().getVideo().get(0), JCVideoPlayer.SCREEN_LAYOUT_LIST, ""); //加载图片 if (setUp) { //设置默认封面 Glide.with(mContext).load(Constant.BASE_URL+mediaItem.getVideo().getThumbnail().get(0)).into(jcvVideoplayer.thumbImageView); } tvPlayNums.setText(mediaItem.getVideo().getPlaycount() + "次播放"); tvVideoDuration.setText(utils.stringForTime(mediaItem.getVideo().getDuration() * 1000) + ""); } } class ImageHolder extends BaseViewHolder { TextView tvContext; ImageView ivImageIcon; ImageHolder(View convertView) { super(convertView); //中间公共部分 -所有的都有 tvContext = (TextView) convertView.findViewById(R.id.tv_context); ivImageIcon = (ImageView) convertView.findViewById(R.id.iv_image_icon); } public void setData(NetAudioBean.ListBean mediaItem) { super.setData(mediaItem); //设置文本-所有的都有 tvContext.setText(mediaItem.getText() + "_" + mediaItem.getType()); //图片特有的 ivImageIcon.setImageResource(R.drawable.bg_item); if (mediaItem.getImage() != null && mediaItem.getImage() != null && mediaItem.getImage().getThumbnail_small() != null) { Glide.with(mContext).load(Constant.BASE_URL+mediaItem.getImage().getThumbnail_small().get(0)). placeholder(R.drawable.bg_item). error(R.drawable.bg_item). diskCacheStrategy(DiskCacheStrategy.ALL). into(ivImageIcon); } } } class TextHolder extends BaseViewHolder { TextView tvContext; TextHolder(View convertView) { super(convertView); //中间公共部分 -所有的都有 tvContext = (TextView) convertView.findViewById(R.id.tv_context); } public void setData(NetAudioBean.ListBean mediaItem) { super.setData(mediaItem); //设置文本-所有的都有 tvContext.setText(mediaItem.getText() + "_" + mediaItem.getType()); } } class GifHolder extends BaseViewHolder { TextView tvContext; ImageView ivImageGif; private ImageOptions imageOptions; GifHolder(View convertView) { super(convertView); //中间公共部分 -所有的都有 tvContext = (TextView) convertView.findViewById(R.id.tv_context); ivImageGif = (ImageView) convertView.findViewById(R.id.iv_image_gif); imageOptions = new ImageOptions.Builder() //包裹类型 .setSize(ViewGroup.LayoutParams.WRAP_CONTENT, -2) //设置圆角 .setRadius(DensityUtil.dip2px(5)) .setIgnoreGif(false)//是否忽略gif图。false表示不忽略。不写这句,默认是true .setImageScaleType(ImageView.ScaleType.CENTER_CROP) .setLoadingDrawableId(R.drawable.video_default) .setFailureDrawableId(R.drawable.video_default) .build(); } public void setData(NetAudioBean.ListBean mediaItem) { super.setData(mediaItem); //设置文本-所有的都有 tvContext.setText(mediaItem.getText() + "_" + mediaItem.getType()); //下面是gif if (mediaItem.getGif() != null && mediaItem.getGif() != null && mediaItem.getGif().getImages() != null) { Glide.with(mContext).load(Constant.BASE_URL+mediaItem.getGif().getImages().get(0)).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(ivImageGif); // x.image().bind(ivImageGif, mediaItem.getGif().getImages().get(0), imageOptions); } } } static class ADHolder { TextView tvContext; ImageView ivImageIcon; Button btnInstall; ADHolder(View convertView) { //中间公共部分 -所有的都有 tvContext = (TextView) convertView.findViewById(R.id.tv_context); btnInstall = (Button) convertView.findViewById(R.id.btn_install); ivImageIcon = (ImageView) convertView.findViewById(R.id.iv_image_icon); } } }