Android仿搜狐视频、微视等列表播放视频功能

发布时间 - 2026-01-11 02:44:19    点击率:

最近项目中需要是实现在列表中自动播放视频,中间遇到了些问题,终于解决,特来跟大家分享一下:

列表使用的RecyclerView 播放视频使用MediaPlayer+TextureView。

主要思路:

1、监听RecyclerView的滑动,开始滑动时停止正在播放的item。

2、通过LinearLayoutManager 获取当前显示的第一个item及最后一个item

3、RecyclerView停止滑动后,选择item进行播放。如果当前界面只有一个item,播放当前。如果item数量大于2个,播放第二个。如当前界面有两个item则判定哪一个显示的区域比较大。播放item并记录当前position。

附上主要实现逻辑:

try { 
  int fristPos = layoutManager.findFirstVisibleItemPosition(); 
  int lastPos = layoutManager.findLastVisibleItemPosition(); 
  ViewHolder holder = null; 
  if (recyclerView.getChildCount() == 2) { 
  View fristView = recyclerView.getChildAt(0); 
  if (fristView != null) { 
   int[] location = new int[2]; 
   fristView.getLocationInWindow(location); 
   if (location[1] > 0) { 
   holder = (ViewHolder) recyclerView.findViewHolderForPosition(fristPos); 
   lastPlayPosition = fristPos; 
   } 
  } 
  if (holder == null) { 
   View lastView = recyclerView.getChildAt(1); 
   if (lastView != null) { 
   int[] lastViewLocation = new int[2]; 
   lastView.getLocationInWindow(lastViewLocation); 
   if ((lastViewLocation[1] + videoHeight) < screenHeight) { 
    holder = (ViewHolder) recyclerView.findViewHolderForPosition(lastPos); 
    lastPlayPosition = lastPos; 
   } 
   } 
 
 
  } 
  } else if (recyclerView.getChildCount() == 1) { 
  holder = (ViewHolder) recyclerView.findViewHolderForPosition(fristPos); 
  lastPlayPosition = fristPos; 
  } else { 
  holder = (ViewHolder) recyclerView.findViewHolderForPosition(fristPos + 1); 
  lastPlayPosition = fristPos + 1; 
  } 
 
 
  if (holder != null) { 
  holder.play(); 
  } 
  
 } catch (Exception e) { 
  e.printStackTrace(); 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 列表  # 播放视频  # android使用surfaceview+MediaPlayer播放视频  # Android ViewPager中显示图片与播放视频的填坑记录  # Android中使用TextureView播放视频  # Android编程实现播放视频时切换全屏并隐藏状态栏的方法  # Android编程实现播放视频的方法示例  # Android多媒体教程之播放视频的四种方法  # Android 播放视频常见问题小结  # Android DragVideo实现播放视频时任意拖拽的方法  # Android仿新浪微博/QQ空间滑动自动播放视频功能  # android surfaceView实现播放视频功能  # 第一个  # 第二个  # 只有一个  # 比较大  # 大家分享  # 正在播放  # 大家多多  # 自动播放  # 特来  # 有两个  # 列表中  # lt  # videoHeight  # LinearLayoutManager  # screenHeight  # lastViewLocation  # pre  # class  # lastView  # position 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php结合redis实现高并发下的抢购、秒杀功能的实例  如何在景安云服务器上绑定域名并配置虚拟主机?  如何获取上海专业网站定制建站电话?  如何将凡科建站内容保存为本地文件?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  高端建站三要素:定制模板、企业官网与响应式设计优化  深圳网站制作培训,深圳哪些招聘网站比较好?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  微信小程序 wx.uploadFile无法上传解决办法  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel如何处理文件下载请求?(Response示例)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  LinuxShell函数封装方法_脚本复用设计思路【教程】  使用spring连接及操作mongodb3.0实例  如何快速生成凡客建站的专业级图册?  lovemo网页版地址 lovemo官网手机登录  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  香港网站服务器数量如何影响SEO优化效果?  SQL查询语句优化的实用方法总结  JavaScript如何实现类型判断_typeof和instanceof有什么区别  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  JavaScript Ajax实现异步通信  在centOS 7安装mysql 5.7的详细教程  打造顶配客厅影院,这份100寸电视推荐名单请查收  如何在香港免费服务器上快速搭建网站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  简历在线制作网站免费版,如何创建个人简历?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel怎么实现模型属性的自动加密  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  java获取注册ip实例  网站制作壁纸教程视频,电脑壁纸网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何生成API文档?(Swagger/OpenAPI教程)  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  个人网站制作流程图片大全,个人网站如何注销?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Android自定义控件实现温度旋转按钮效果  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  网站建设整体流程解析,建站其实很容易!  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  微信小程序 require机制详解及实例代码  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  android nfc常用标签读取总结