Android 列表视频滑动自动播放(实现思路)

1、列表(RecyclerView)中内容包含视频,列表在快速滑动时候,如果每个视频自动播放,会导致页面卡顿。我们优化思路,通过监听RecyclerView滑动状态,来实现当停止滑动时候,来播放视频

滑动监听:recyclerView.addOnScrollListener(this)

实现具体方法:onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState)

newState:

RecyclerView.SCROLL_STATE_IDLE: //滑动停止

RecyclerView.SCROLL_STATE_DRAGGING: //手指拖动

RecyclerView.SCROLL_STATE_SETTLING: //惯性滚动

这里只介绍SCROLL_STATE_IDLE来处理滑动停止,自动播放相关思路和逻辑

 public void startVideo() {//第一步:获取LinearLayoutManagerLinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();if (layoutManager != null) {//第二步:获取当前第一个显示itemView的position,并得到这条数据是否有视频int findFirstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();//第三步:获取当前itemView的 ViewHolder,并通过获取视频播放控件ViewHolder viewHolder = (ViewHolder) recyclerView.findViewHolderForAdapterPosition(findFirstVisibleItemPosition);VideoView videoView = viewHolder.itemView.findViewById(R.id.videoView);//计算视频播放控件,显示比例,当>=50%,则播放当前,否则寻找下一条显示item,播放Rect itemRect = new Rect();videoView.getLocalVisibleRect(itemRect);int visibleHeight = itemRect.bottom - itemRect.top;int totalHeight = videoView.getHeight();float visibleRatio = (float) visibleHeight / totalHeight;if (visibleRatio >= 0.5f) {//播放视频} else {//第二个显示视频//获取已显示最后一条数据positionint lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();int firstPosition = findFirstVisibleItemPosition + 1;if (firstPosition <= lastVisibleItemPosition) {//遍历,找到有视频的positionfor (int i = firstPosition; i < lastVisibleItemPosition; i++) {//当前有视频播放//计算视频播放控件,显示比例,当>=50%,则播放当前,否则寻找下一条显示item,播放viewHolder = (ViewHolder) recyclerView.findViewHolderForAdapterPosition(i);videoView = viewHolder.itemView.findViewById(R.id.videoView);itemRect = new Rect();videoView.getLocalVisibleRect(itemRect);visibleHeight = itemRect.bottom - itemRect.top;totalHeight = videoView.getHeight();visibleRatio = (float) visibleHeight / totalHeight;if (visibleRatio >= 0.5f) {//播放视频,结束循环return;}}}}}}

SCROLL_STATE_DRAGGING(SCROLL_STATE_DRAGGING)我们需要暂停已经在播放的视频,我已经知道播放的是哪个position

  public void stopVideo() {//当前播放视频角标,是否在播放,if (startPosition >= 0) {ViewHolder viewHolder = (ViewHolder) recyclerView.findViewHolderForAdapterPosition(startPosition);if (viewHolder != null) {VideoView videoView = viewHolder.itemView.findViewById(R.id.videoView);if (videoView != null) {videoView.pause();}//停止播放,设置再播放未-1,表示未有播放视频startPosition = -1;}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索服务器硬件:理解基础组件及其重要性

在现代IT基础设施中&#xff0c;服务器扮演着至关重要的角色。无论是托管网站、管理数据、运行应用程序还是提供各种在线服务&#xff0c;服务器硬件的性能和稳定性都是确保这些任务顺利进行的关键。本文将介绍服务器硬件的基本组件及其功能&#xff0c;以帮助读者更好地理解和…

Keepalived LVS群集

一、Keepalived案例分析 企业应用中&#xff0c;单台服务器承担应用存在单点故障的危险 单点故障一旦发生&#xff0c;企业服务将发生中断&#xff0c;造成极大的危害 二、Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 支持故障自动切换&#xff08;Failover&#…

OceanMind海睿思成功签约南京市交通集团,助力集团数字化转型高效推进!

近日&#xff0c;中新赛克海睿思与南京市政府批准成立的市级国有全资公司——南京市交通建设投资控股&#xff08;集团&#xff09;有限责任公司&#xff08;以下简称“南京市交通集团”&#xff09;达成深度战略合作&#xff0c;为南京市交通集团提供数据中心及监管数据管理平…

2.4G低功耗无线收发SOC芯片-SI24R03

随着物联网产业对集成度的需求越来越高&#xff0c; 也在不断地完善公司产品生态。 “射频MCU”产品组合--无线SOC芯片&#xff08;MCU&#xff09;&#xff0c;简化了系统设计。只需要少量的外围器件&#xff0c;用户即可实现产品的开发&#xff0c;有效减少了PCB板的占用…

vue关闭页面时触发的函数(ai生成)

在Vue中&#xff0c;可以通过监听浏览器的beforeunload事件来在关闭页面前触发函数。这里是一个简单的示例&#xff1a; new Vue({el: #app,methods: {handleBeforeUnload(event) {// 设置returnValue属性以显示确认对话框event.returnValue 你确定要离开吗&#xff1f;;// 在…

什么是校园抄表系统?

1.校园抄表系统的简述 校园抄表系统是当代高校管理中的一个重要组成部分&#xff0c;主要运用于全自动搜集、管理方法与分析校园里的电力能源使用数据&#xff0c;如水电煤等。它通过先进的方式方法&#xff0c;完成了对能源消耗的实时监控系统&#xff0c;提升了电力能源管理…

(源码)一套医学影像PACS系统源码 医院系统源码 提供数据接收、图像处理、测量、保存、管理、远程医疗和系统参数设置等功能

PACS系统还提供了数据接收、图像处理、测量、保存、管理、远程医疗和系统参数设置等功能。 PACS系统提高了医学影像的利用率和诊疗效率&#xff0c;为医生提供了更加准确和及时的诊断依据。它是医院信息化的必备系统之一&#xff0c;已经成为医学影像管理和传输的重要工具。 P…

忆捷硬盘数据恢复方法有哪些?常见的有这四种

在数字化时代&#xff0c;硬盘作为存储大量数据的重要设备&#xff0c;其安全性与可靠性直接关系到我们的工作和生活。然而&#xff0c;无论是由于误操作、病毒感染还是硬件故障&#xff0c;硬盘数据丢失的情况时有发生。对于使用忆捷硬盘的用户来说&#xff0c;如何在数据丢失…

从零手写实现 nginx-22-modules 模块配置加载

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

DETR实现目标检测(二)-利用自己训练的模型进行预测

1、图片预测&#xff08;CPU&#xff09; 关于DETR模型训练自己的数据集参考上篇文章&#xff1a; DETR实现目标检测(一)-训练自己的数据集-CSDN博客 训练完成后的模型文件保存位置如下&#xff1a; 准备好要预测的图片&#xff1a; 然后直接调用模型进行预测&#xff0c;并设…

linux部署运维3——centos7.9离线安装部署配置涛思taos2.6时序数据库TDengine以及java项目链接问题处理(二)

上一篇讲了centos7.9如何安装涛思taos2.6时序数据库的操作步骤和方案&#xff0c;本篇主要讲解taos数据库的初始化&#xff0c;相关配置说明&#xff0c;数据库和表的创建问题以及java项目连接问题。 centos7.9如何离线安装taos2.6&#xff0c;请点击下方链接详细查看&#xf…

React的@reduxjs/toolkit的异步方法处理和实现

一、使用异步方法,需要 createAsyncThunk 函数 1.首先在特定的ts文件中建立异步 const fetchArticles=createAsyncThunk(searchArticle/fetchArticles,async({SearchKey,type},thunkAPI)=>{const params = {Filter: SearchKey,PageSize: 10,PageNum: 1,ArticleType: &quo…

YOLOv5改进 | Head | 将yolov5的检测头替换为ASFF_Detect

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在目标检测中&#xff0c;为了解决尺度变化的问题&#xff0c;通常采用金字塔特征表示。然而&#xff0c;对于基于特征金字塔的单次检测器来…

Python中的pass语句

在Python编程语言中&#xff0c;pass是一个特殊的语句&#xff0c;它并不执行任何操作&#xff0c;仅仅用作占位符。当我们在编写代码时&#xff0c;有时需要定义一个空的代码块或函数&#xff0c;但又不想立即实现它&#xff0c;这时候pass语句就派上了用场。pass语句可以帮助…

h5页面上传图片安卓手机无法调用摄像头

<input type”file”> 在ios中&#xff0c;会 而安卓中&#xff0c;没有这些选项 解决方法&#xff1a; 给input 加上accept属性 <input type”file” accept”image/*” /> //调用相机 &#xff0c;图片或者相册 &#xff08;两者都行&#xff09; 加上了cap…

MYSQL 查看SQL执行计划

一、explain explain select id,db,user,host,command,time,state,info from information_schema.processlist order by time desc; id: 查询的标记&#xff0c;可以查看不同查询的执行顺序。 select_type: 查询的类型&#xff0c;如SIMPLE、SUBQUERY、PRIMARY等。 table: …

本地Zabbix开源监控系统安装内网穿透实现远程访问详细教程

文章目录 前言1. Linux 局域网访问Zabbix2. Linux 安装cpolar3. 配置Zabbix公网访问地址4. 公网远程访问Zabbix5. 固定Zabbix公网地址 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【…

web前端按值传递:深入剖析与探索

web前端按值传递&#xff1a;深入剖析与探索 在Web前端开发中&#xff0c;按值传递是一种重要的参数传递方式。然而&#xff0c;其背后的机制、影响以及在实际应用中的使用技巧&#xff0c;往往让开发者感到困惑。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;…

Ollama在windows上的设置

下载 Download Ollama on macOS 安装&#xff1a;是不可以选择安装路径&#xff0c;系统自动运行&#xff0c;不启动模型不占用GPU 参数设置&#xff1a;windows添加环境变量&#xff08;需要重启ollama&#xff09; 修改模型位置&#xff1a;添加 OLLAMA_MODELS D:\LLM\Oll…

【必会面试题】TCP协议的粘包拆包

目录 TCP数据报文结构粘包拆包如何处理粘包和拆包 TCP协议的粘包和拆包是数据传输过程中常见的现象&#xff0c;它们不是TCP协议本身的设计目的&#xff0c;而是基于TCP协议的特性自然产生的结果。 TCP数据报文结构 字段名English Name长度&#xff08;比特&#xff09;描述源…