效果(随手画的啊,哈哈哈)

主要就是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@Overridepublic int getItemCount() {return 26;}//实现多item布局,用不同的itemType去加载不同的布局。    @Overridepublic 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的对象@Overridepublic 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*/@Overridepublic 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);}}@Overridepublic 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() {@Overridepublic 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;@Overrideprotected 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);}@Overrideprotected void onPause() {super.onPause();Log.v(TAG, "onPause");// 当home键切出,想暂停视频的话,反注释下面的代码。同时要反注释onResume中的代码if (mVV.isPlaying()) {isPausedByOnPause = true;mVV.pause();}}@Overrideprotected void onResume() {super.onResume();
//         当home键切出,暂停了视频此时想回复的话,反注释下面的代码if (isPausedByOnPause) {isPausedByOnPause = false;mVV.start();}Log.v(TAG, "onResume");}@Overrideprotected void onRestart() {super.onRestart();Log.v(TAG, "onRestart");if (mVV!=null){mVV.enterBackground();}}@Overrideprotected void onStop() {Log.v(TAG, "onStop");// enterBackground should be invoke before super.onStop()if (mVV != null) {mVV.enterBackground();}super.onStop();}@Overrideprotected 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.多格式视频文件缓存

资源:

百度音视频:https://cloud.baidu.com/doc/MCT/Android-Player-SDK-2.0.html#.47.AE.13.BF.62.BE.FC.FA.FE.83.60.80.53.2F.B9.AD

(有兴趣了解音视频的可以去看下demo和sdk,里面还有很多方法。)

Android RecyclerView复杂布局 实现多Item,item中含视频文件播放相关推荐

  1. Android VideoView播放 项目中的 视频文件 自动横屏 全屏播放

    记录最近遇到的一个android播放视频的需求: APP主页上方有一个操作演示字样的入口,点击后开始播放一段视频,视频文件是放在工程里的. 话说以前还没做过类似播放视频的功能,根据以往的经验来看,最简 ...

  2. Android RecyclerView网格布局动画

    In this tutorial, we'll learn how to create animation for a RecyclerView in which elements are displ ...

  3. android视频播放指定位置,android – 如何在某个特定位置的视图中查看视频?

    我目前正在试图实施一个视频视图,以便在特定的位置显示一个视频.我可以显示一个全屏视频没有问题.然而,无论何时我尝试在框架(例如一个小矩形)中显示视频,我只能在该视图中显示一部分视频.我无法将视频放入该 ...

  4. Android --- RecyclerView 水平滑动时,一个 item 一个 item 的滑动,禁止滑动到一半停止

    使用RecyclerView水平滑动显示item,一个item占整个屏幕宽度, 所以基本写法水平滑动不会一个item一个item的显示完整,而是各自显示一部分.因此这个不是我们想要的结果.效果就是像广 ...

  5. android 分割线布局,Android RecyclerView网格布局(支持多种分割线)详解(2)

    记录了下RecyclerView的使用方法,并且讲述了线性布局列表的使用方法,在此基础上加上了万能分割线,支持颜色分割线和图片分割线,同时支持对分割线设置线宽. 这篇是总结一下网格布局的使用,同样也支 ...

  6. Android recyclerView 多布局

    1.首先引入我们的RecyclerView的包 2.在布局文件中使用他 <android.support.v7.widget.RecyclerView android:id="@+id ...

  7. android recyclerview多布局_图文讲解RecyclerView的复用机制 ||Recyclerview进阶

    码个蛋(codeegg) 第 1085 次推 作者:susion 博客地址:https://juejin.im/post/5c1369cff265da613b6fa87f 本文是RecyclerVie ...

  8. android RecyclerView 九宫格布局上下均分

    今天有人问到这方面问题,趁着礼拜天 分享给大家 ,直接上代码 首先先将下面的复制的你的代码中 public class ItemOffsetDecoration extends RecyclerVie ...

  9. android倒计时框_在提示框中:视频游戏播放时间,维修电脑鼠标和极简主义的Android计时器...

    android倒计时框 Once a week we round up some great reader tips and share them with everyone. This week w ...

最新文章

  1. 【摄像头】低照度和光圈
  2. 怎样在javascript函数中将变量传递给服务端脚本程序?
  3. java 月第一天_java获取当前月第一天和最后一天
  4. 机器学习算法如何调参?这里有一份神经网络学习速率设置指南
  5. ArrayList原理分析(重点在于扩容)
  6. 推荐一款最好用Mysql数据库客户端
  7. LeetCode:Length of Last Word
  8. 【Vue Laravel-mix】Error with Vue lazy loading components: “Failed to resolve async component“
  9. linux驱动开发---并发控制
  10. mysql 时间差_后端从mysql取值返回0时区时间数据的问题
  11. C++提高部分_C++类模板成员函数类外实现---C++语言工作笔记092
  12. 程序员代码面试指南——笔记1
  13. C++ stack的使用及模拟实现
  14. 无盘服务器 显卡,我也来说说网吧配机器该用什么显卡
  15. 【抓包】【Mac Charles】局域网无法抓包 手机热点来解决
  16. 学习笔记——VLSI测试方法学和可测性设计
  17. 新版Q绑查询HTML源码
  18. java国际化转换_java 实现国际化 中英文语言切换
  19. 关于电脑任务栏软件图标变成白色白纸的解决办法
  20. 【自然语言处理】ChatGPT 相关核心算法

热门文章

  1. 证考网:考过二级建造师后必须要注册吗?
  2. 500左右什么牌子蓝牙耳机好?
  3. 微信小程序实现单选框以及复选框默认样式修改(超详细)
  4. java设置边框颜色_java poi 设置边框
  5. 常见快捷键eclipse
  6. Ruijie S5750C-28SFP4XS-H 组建VSU
  7. 波动光学:光的衍射计算
  8. 应用宝苹果版_密特拉之星应用宝下载-密特拉之星应用宝版本1.0.4 腾讯版
  9. python应用第三方库pyecharts画折线图
  10. Miracast投屏协议深入剖析