效果(随手画的啊,哈哈哈)
主要就是Adapter里面的内容
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.baidu.cloud.media.player.IMediaPlayer;
import com.baidu.cloud.videoplayer.widget.BDCloudVideoView;
import com.dreamlive.upmarqueeview.UPMarqueeView;
import com.example.zl.myapplication.R;
import com.example.zl.utils.GlideImageLoader;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import de.hdodenhof.circleimageview.CircleImageView;
/**
* Created by Zl on 2018/7/23.
*/
public class HomeAdapter extends RecyclerView.Adapter
// implements IMediaPlayer.OnCompletionListener
{
private LayoutInflater inflater;
private List<Integer> imgList;
private List<String> marqueeList;
private List<Integer> columnImgList;
private List<String> columnTextList;
private List<Integer> NumTwoImgList;
private List<String> NumTwoTextList;
private List<Integer> NumThreeImgList;
private List<String> NumThreeTextList;
private List<Integer> NormalImgList;
private List<String> NormalTextList;
private static final int BANNER = 0;
private static final int COLUMN = 1;
private static final int MARQUEE = 2;
private static final int NUM_TWO = 3;
private static final int TITLE = 4;
private static final int NUM_THREE = 5;
private static final int NORMAL = 6;
private static final int PERCENT = 7;
private Context mContext;
private BDCloudVideoView mVV;
String url1 = "http://hi2mjn97mjn2tc40unn.exp"
+ ".bcevod.com/mda-hkzib2fjdgq24cvu/mp41080p/mda-hkzib2fjdgq24cvu.mp4";
public HomeAdapter(Context mContext,BDCloudVideoView mVV) {
this.mContext= mContext;
this.mVV=mVV;
inflater = LayoutInflater.from(mContext);
//添加轮播数据
addBannerData();
//
addColumnData();
//添加跑马灯数据
addMarqueeData();
//
addNumTwoData();
//
addNumThreeData();
//
addNormalData();
}
//数据源Size
@Override
public int getItemCount() {
return 26;
}
//实现多item布局,用不同的itemType去加载不同的布局。
@Override
public int getItemViewType(int position) {
if (position == 0) {
return BANNER;
} else if (position >= 1 && position <= 8) {
return COLUMN;
} else if (position == 9) {
return MARQUEE;
} else if (position >= 10 && position <= 13) {
return NUM_TWO;
} else if (position ==14) {
return PERCENT;
} else if (position == 15 || position == 19) {
return TITLE;
} else if (position >= 16 && position <= 18) {
return NUM_THREE;
} else if (position >= 20 && position <= 25) {
return NORMAL;
}
return super.getItemViewType(position);
}
//引入item布局,得到View对象
//创建ViewHolder对象,传入View,最return当前ViewHolder的对象
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case BANNER:
View itemBanner = inflater.inflate(R.layout.item_banner, parent, false);
return new BannerHolder(itemBanner);
case COLUMN:
View itemColumn = inflater.inflate(R.layout.item_column, parent, false);
return new ColumnHolder(itemColumn);
case MARQUEE:
View itemMarquee = inflater.inflate(R.layout.item_marquee, parent, false);
return new MarqueeHolder(itemMarquee);
case NUM_TWO:
View itemNumTwo = inflater.inflate(R.layout.item_num_two, parent, false);
return new NumTwoHolder(itemNumTwo);
case PERCENT:
View itemPercent = inflater.inflate(R.layout.item_percent, parent, false);
return new PercentHolder(itemPercent);
case TITLE:
View itemTitle = inflater.inflate(R.layout.item_title, parent, false);
return new TitleHolder(itemTitle);
case NUM_THREE:
View itemNumThree = inflater.inflate(R.layout.item_num_three, parent, false);
return new NumThreeHolder(itemNumThree);
case NORMAL:
View itemNormal = inflater.inflate(R.layout.item_normal, parent, false);
return new NormalHolder(itemNormal);
default:
return null;
}
}
/**
* 绑定数据
*通过position获取当前item数据给holder对象内的对象添加set数据
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof BannerHolder) {
setBanner((BannerHolder) holder);
} else if (holder instanceof ColumnHolder) {
setColumn((ColumnHolder) holder);
} else if (holder instanceof MarqueeHolder && marqueeList != null) {
setMarquee((MarqueeHolder) holder);
} else if (holder instanceof NumTwoHolder) {
setNumTwo((NumTwoHolder) holder);
} else if (holder instanceof PercentHolder) {
setPercent((PercentHolder) holder);
} else if (holder instanceof TitleHolder) {
setTitle((TitleHolder) holder, position);
} else if (holder instanceof NumThreeHolder) {
setNumThree((NumThreeHolder) holder);
} else if (holder instanceof NormalHolder) {
setNormal((NormalHolder) holder);
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
if (manager instanceof GridLayoutManager) {
final GridLayoutManager gridManager = ((GridLayoutManager) manager);
gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int type = getItemViewType(position);
switch (type) {
case BANNER:
return 12;
case COLUMN:
return 3;
case MARQUEE:
return 12;
case NUM_TWO:
return 6;
case PERCENT:
return 12;
case TITLE:
return 12;
case NUM_THREE:
return 4;
case NORMAL:
return 6;
default:
return 12;
}
}
});
}
}
/**
* 轮播图
*/
public class BannerHolder extends RecyclerView.ViewHolder {
@BindView(R.id.banner)
Banner banner;
BannerHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class ColumnHolder extends RecyclerView.ViewHolder {
@BindView(R.id.circleImage)
CircleImageView circleImage;
@BindView(R.id.tv_img_name)
TextView tv_img_name;
public ColumnHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
/**
* 跑马灯
*/
public class MarqueeHolder extends RecyclerView.ViewHolder {
@BindView(R.id.marquee)
UPMarqueeView marquee;
public MarqueeHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class NumTwoHolder extends RecyclerView.ViewHolder {
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.textView2)
TextView textView2;
@BindView(R.id.image_one)
ImageView image_one;
@BindView(R.id.imageView3)
ImageView imageView3;
public NumTwoHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class TitleHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_title)
TextView tvTitle;
public TitleHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class NumThreeHolder extends RecyclerView.ViewHolder {
@BindView(R.id.iv_three_img)
ImageView iv_three_img;
@BindView(R.id.tv_three_name)
TextView tv_three_name;
public NumThreeHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class NormalHolder extends RecyclerView.ViewHolder {
@BindView(R.id.iv_liked)
ImageView iv_liked;
@BindView(R.id.tv_good_name)
TextView tv_good_name;
@BindView(R.id.tv_good_price)
TextView tv_good_price;
public NormalHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class PercentHolder extends RecyclerView.ViewHolder {
// @BindView(R.id.tv_color_one)
// TextView tv_color_one;
@BindView(R.id.view_holder)
RelativeLayout view_holder;
@BindView(R.id.tv_color_two)
TextView tv_color_two;
@BindView(R.id.tv_color_three)
TextView tv_color_three;
@BindView(R.id.tv_color_four)
TextView tv_color_four;
@BindView(R.id.tv_color_five)
TextView tv_color_five;
public PercentHolder(View itemPercent) {
super(itemPercent);
ButterKnife.bind(this, itemView);
}
}
/**
* 轮播图图片列表
*/
private void addBannerData() {
imgList = new ArrayList<>();
imgList.add(R.drawable.home_pic);
imgList.add(R.drawable.home_pic);
imgList.add(R.drawable.home_pic);
}
/**
* 添加跑马灯数据
*/
private void addMarqueeData() {
marqueeList = new ArrayList<>();
marqueeList.add("寒蝉凄切,对长亭晚,骤雨初歇。");
marqueeList.add("都门帐饮无绪,留恋处,兰舟催发。");
marqueeList.add("执手相看泪眼,竟无语凝噎。");
marqueeList.add("念去去,千里烟波,暮霭沉沉楚天阔。");
}
private void addColumnData() {
columnImgList = new ArrayList<>();
for (int i = 0; i < 8; i++) {
columnImgList.add(R.drawable.girl);
}
columnTextList = new ArrayList<>();
for (int i = 0; i < 8; i++) {
columnTextList.add("美女");
}
}
private void addNumTwoData() {
NumTwoImgList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
}
// NumTwoImgList.add(R.drawable.cloth);
NumTwoTextList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
}
// NumTwoTextList.add("买衣服");
}
private void addNumThreeData() {
NumThreeImgList = new ArrayList<>();
NumThreeTextList = new ArrayList<>();
}
private void addNormalData() {
NormalImgList = new ArrayList<>();
NormalTextList = new ArrayList<>();
}
/**
* 绑定轮播图数据
*/
private void setBanner(BannerHolder holder) {
holder.banner.setBannerStyle(BannerConfig.NUM_INDICATOR);
holder.banner.setImageLoader(new GlideImageLoader());
holder.banner.setImages(imgList);
holder.banner.setBannerAnimation(Transformer.Default);
holder.banner.isAutoPlay(true);
holder.banner.setDelayTime(3000);
holder.banner.setIndicatorGravity(BannerConfig.CENTER);
holder.banner.start();
}
/**
* 设置跑马灯
*/
private void setMarquee(MarqueeHolder holder) {
List<View> views = new ArrayList<>();
for (int i = 0; i < marqueeList.size(); i = i + 2) {
LinearLayout view = (LinearLayout) inflater.inflate(R.layout.marquee_text, null);
TextView textTop = (TextView) view.findViewById(R.id.text_top);
TextView textBottom = (TextView) view.findViewById(R.id.text_bottom);
textTop.setText(marqueeList.get(i));
if (marqueeList.size() > i + 1) {
textBottom.setText(marqueeList.get(i + 1));
}
views.add(view);
}
holder.marquee.setViews(views);
}
public void setColumn(ColumnHolder holder) {
holder.tv_img_name.setText("美女");
holder.circleImage.setImageResource(R.drawable.girl);
}
public void setNumTwo(NumTwoHolder holder) {
holder.image_one.setImageResource(R.drawable.dress);
holder.imageView3.setImageResource(R.drawable.cloth);
holder.textView.setText("晚与你");
holder.textView2.setText("see you");
}
public void setNumThree(NumThreeHolder holder) {
holder.iv_three_img.setImageResource(R.drawable.boy);
holder.tv_three_name.setText("森林木");
}
public void setNormal(NormalHolder holder) {
holder.iv_liked.setImageResource(R.drawable.boy);
holder.tv_good_name.setText("森林木");
holder.tv_good_price.setText("¥200");
}
public void setPercent(PercentHolder holder) {
playVideo((PercentHolder) holder);
// holder.tv_color_one.setText("1");
//
// holder.tv_color_one.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// ARouter.getInstance().build("/test/videoPlay").navigation();
// }
// });
holder.tv_color_two.setText("2");
holder.tv_color_three.setText("3");
holder.tv_color_four.setText("4");
holder.tv_color_five.setText("5");
}
private void playVideo(PercentHolder holder) {
BDCloudVideoView.setAK("");
mVV = new BDCloudVideoView(mContext);
mVV.setLooping(true);//是否循环播放
mVV.setBufferTimeInMs(0);//设置"加载中"触发时,缓存多长时间的数据才结束
mVV.setVideoPath(url1);
/**
* 铺满,不保证视频内容宽高比。视频显示与屏幕宽高相等
*/
mVV.setVideoScalingMode(BDCloudVideoView.VIDEO_SCALING_MODE_SCALE_TO_MATCH_PARENT);
// if (isPlayerFitModeCrapping(mContext)) {
// mVV.setVideoScalingMode(BDCloudVideoView.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
// } else {
// mVV.setVideoScalingMode(BDCloudVideoView.VIDEO_SCALING_MODE_SCALE_TO_FIT);
// }
RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(-1, -1);
rllp.addRule(RelativeLayout.CENTER_IN_PARENT);
holder.view_holder.addView(mVV, rllp);
mVV.start();
}
/**
* 模块标题
*/
private void setTitle(TitleHolder holder, int position) {
switch (position) {
case 15:
holder.tvTitle.setText("精品推荐");
break;
case 19:
holder.tvTitle.setText("猜你喜欢");
break;
}
}
// @Override
// public void onCompletion(IMediaPlayer iMediaPlayer) {
// if (mVV!=null){
mVV.
// }
// }
private static final String SETTINGS_SPNAME = "video-settings";
public static boolean isPlayerFitModeCrapping(Context context) {
SharedPreferences spList = context.getSharedPreferences(SETTINGS_SPNAME, 0);
return spList.getBoolean("isCrapping", false);
}
Activity内容
public class MainActivity extends AppCompatActivity {
private static final String TAG="MainActivity";
private Button button;
private Button button_binding;
private Unbinder mUnBinder;
@BindView(R.id.rc_Home)
RecyclerView rcHome;
BDCloudVideoView mVV= null;
boolean isPausedByOnPause = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// ARouter.getInstance().inject(this);
mUnBinder = ButterKnife.bind(this);
initView();
}
private void initView() {
mVV = new BDCloudVideoView(this);
HomeAdapter adapter = new HomeAdapter(this, mVV);
GridLayoutManager layoutManger = new GridLayoutManager(this, 12);
rcHome.setLayoutManager(layoutManger);
rcHome.setAdapter(adapter);
}
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "onPause");
// 当home键切出,想暂停视频的话,反注释下面的代码。同时要反注释onResume中的代码
if (mVV.isPlaying()) {
isPausedByOnPause = true;
mVV.pause();
}
}
@Override
protected void onResume() {
super.onResume();
// 当home键切出,暂停了视频此时想回复的话,反注释下面的代码
if (isPausedByOnPause) {
isPausedByOnPause = false;
mVV.start();
}
Log.v(TAG, "onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v(TAG, "onRestart");
if (mVV!=null){
mVV.enterBackground();
}
}
@Override
protected void onStop() {
Log.v(TAG, "onStop");
// enterBackground should be invoke before super.onStop()
if (mVV != null) {
mVV.enterBackground();
}
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mUnBinder.unbind();
if (mVV != null) {
mVV.stopPlayback(); // 释放播放器资源
mVV.release(); // 释放播放器资源和显示资源
}
mVV = null;
// if (mediaController != null) {
// mediaController.release();
// }
Log.v(TAG, "onDestroy");
}
}
后期更新剩余代码以及Demo,如果有优化会加上的。我也是这周才写的,每天写点点,今天才把视频加进来。。
更新:
1.解决列表中视频文件生命周期问题
待解决:
1.多格式视频文件缓存
资源:
(有兴趣了解音视频的可以去看下demo和sdk,里面还有很多方法。)