1.配置

在project下 build.gradle中添加

allprojects {repositories {......maven { url 'https://www.jitpack.io' }}
}

在app下 build.gradle中添加

dependencies {......implementation 'com.github.zhanglinkai:HeartVideo:v1.0.1'
}

在mainfest中添加权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

在Activity 标签中添加

<activity android:name=".MainActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:screenOrientation="portrait">

2.Adapter适配器

layout_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><com.heartfor.heartvideo.video.HeartVideoandroid:id="@+id/myvideo"android:layout_width="match_parent"android:layout_height="250dp"android:layout_marginBottom="10dp"/></LinearLayout>

MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{private Context context;public MyAdapter(Context context){this.context=context;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view= LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);ViewHolder holder=new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(final ViewHolder holder, int position) {String path="http://vjs.zencdn.net/v/oceans.mp4";String image="https://seopic.699pic.com/photo/40193/8990.jpg_wh1200.jpg";HeartVideoInfo info=HeartVideoInfo.Builder().setTitle("为何大家都选拼BOSS?").setPath(path).setImagePath(image).setSaveProgress(true).builder();VideoControl control=new VideoControl(context);control.setInfo(info);holder.myvideo.setHeartVideoContent(control);}@Overridepublic int getItemCount() {return 10;}public class ViewHolder extends RecyclerView.ViewHolder{public HeartVideo myvideo;public ViewHolder(View itemView) {super(itemView);myvideo=(HeartVideo)itemView.findViewById(R.id.myvideo);}}
}

3.Activity主代码

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recy"android:layout_width="match_parent"android:layout_height="match_parent"/>
</RelativeLayout>

MainActivity

public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;private LinearLayoutManager linearmanager;private int firstVisibleItem;private int lastVisibleItem;private int visibleCount;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView = findViewById(R.id.recy);linearmanager = new LinearLayoutManager(this);recyclerView.setLayoutManager(linearmanager);MyAdapter adapter = new MyAdapter(this);recyclerView.setAdapter(adapter);//重复使用监听recyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {@Overridepublic void onViewRecycled(RecyclerView.ViewHolder holder) {HeartVideo heartVideo = ((MyAdapter.ViewHolder) holder).myvideo;if (heartVideo == HeartVideoManager.getInstance().getCurrPlayVideo()) {HeartVideoManager.getInstance().release();}}});//滑动监听recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);switch (newState) {case SCROLL_STATE_IDLE: //滚动停止autoPlayVideo(recyclerView);break;}}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);firstVisibleItem = linearmanager.findFirstVisibleItemPosition();lastVisibleItem = linearmanager.findLastVisibleItemPosition();visibleCount = lastVisibleItem - firstVisibleItem;}});}private void autoPlayVideo(RecyclerView recyclerview) {RecyclerView.LayoutManager layoutManager = recyclerview.getLayoutManager();for (int i = 0; i < visibleCount; i++) {if (layoutManager != null && layoutManager.getChildAt(i) != null && layoutManager.getChildAt(i).findViewById(R.id.myvideo) != null) {HeartVideo heartVideo = (HeartVideo) layoutManager.getChildAt(i).findViewById(R.id.myvideo);Rect rect = new Rect();heartVideo.getLocalVisibleRect(rect);int videoheight = heartVideo.getHeight();if (rect.top == 0 && rect.bottom == videoheight) {heartVideo.start();return;}}}}@Overrideprotected void onStop() {super.onStop();HeartVideoManager.getInstance().release();}@Overridepublic void onBackPressed() {if (HeartVideoManager.getInstance().onBackPressd()) return;super.onBackPressed();}
}

Android 视频播放器:展示列表视频(HeartVideo)相关推荐

  1. Android 视频播放器 (二):使用MediaPlayer播放视频

    在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...

  2. android 播放视频链接,如何通过Android视频播放器中的直接链接播放MP4视频?

    我正在制作一个 Android应用程序,我需要通过直接下载链接在Android默认本机视频播放器中播放mp4视频. 要打开Android视频播放器,我使用以下代码 Intent intent = ne ...

  3. 基于NDK、C++、FFmpeg的android视频播放器开发实战-夏曹俊-专题视频课程

    基于NDK.C++.FFmpeg的android视频播放器开发实战-1796人已学习 课程介绍         课程包含了对流媒体(拉流)的播放,演示了播放rtmp的香港卫视,支持rtsp摄像头和ht ...

  4. MediaPlayer+TextureView,完美切换全屏、小窗口的 Android 视频播放器

    NiceVieoPlayer 项目地址:xiaoyanger0825/NiceVieoPlayer  简介:MediaPlayer+TextureView,完美切换全屏.小窗口的 Android 视频 ...

  5. android视频播放器流程图,Android OpenGL ES 10.1 视频播放器

    课程介绍 在学习了前面章节OpenGL基础知识后,读者应该具备了复杂界面特效.图片高效处理的开发能力.接下来的章节主要转向Android视频应用开发中的OpenGL ES部分. 一. 视频播放器搭建 ...

  6. 基于ffmpeg+opengl+opensl es的android视频播放器

    最近做了一个android视频播放器,在jni中采用c/c++现了播放器的播放,暂停,快进等基本的播放器功能. 使用开源库FFMpeg来解码,得到音视频数据,FFMPEG是一个功能强大的音视频解码,编 ...

  7. 视频教程-FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器-Android

    FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发 ...

  8. android视频播放器报告,android视频播放器实训报告.doc

    实训报告书 实训名称: Android视频播放器 系 (部): 专业班级: 学生姓名: 学 号: 指导教师: 完成日期: 实训课题Android视频播放器实训人姓名 同组人员实训日期 实训成绩指导教师 ...

  9. Android视频播放器实现小窗口和全屏状态切换

    Android视频播放器实现小窗口和全屏状态切换 实在是不好意思,楼下评论的兄弟久等了,这文章一直没写第一是没时间,第二是自己准备也不充足,最近才看了好几个Android视频播放器的开源项目,才对视频 ...

  10. android播放器国内外现状,RockPlayer:全球最好的Android视频播放器?

    RockPlayer是一款Android上的视频播放器,用来播放存储在手机本地的视频,支持几乎所有的视频格式.RockPlayer由中国北京的一家创业团队开发,他们刚刚推出了新版本应用,开始支持And ...

最新文章

  1. 我的自白——华夏藏珍第一周
  2. 网络安全、Web安全、渗透测试之笔经面经总结(二)
  3. LeetCode-145:二叉树的后序遍历
  4. k3服务器端的虚拟,k3服务器 客户端配置
  5. Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
  6. 2017年苹果企业开发者账号申请完整指南
  7. python参数检查类型_Python类型检查
  8. MCU——JLINk找不到芯片错误记录
  9. 反射:类,构造器,方法使用
  10. 新点软件怎么导入清单_新点清单造价怎么导入电脑桌面上
  11. 华硕服务器主板型号命名规则,【华硕A85X评测】华硕2012年主板命名规则详解-中关村在线...
  12. 戒指戴在不同手指上的含义
  13. 一招秒杀常见网页基本排版布局
  14. 虚幻4全自动连续射击
  15. 波浪动力滑翔机的综述
  16. 操作系统实验:系统内存使用统计
  17. 1118:铺地毯(C C++)
  18. iTween之iTweenPath的使用
  19. Kali与编程:Winserver2019上搭建wds网络部署服务器
  20. gridview纯图片九宫图展示

热门文章

  1. rebar3 windows下安装
  2. 57-混沌操作法之我见:三、突破思想.(2015.2.10)
  3. Spring+Dubbo+MyBatis+Linner分布式Web开发环境搭建(二)
  4. 物联网中,北向接口和南向接口是什么?
  5. 寝室环境对大学生睡眠的影响调查
  6. MD5密码破解(高额悬赏1000大洋)
  7. FastAPI异步 web 框架简介+搭配loguru实现日志服务(转载+补充)
  8. 三、histeq的原理和用法
  9. 【状压+容斥】BZOJ4455 [ZJOI2016] 小星星
  10. 【数学建模】2018年数学建模国赛C题 问题一代码