Android仿搜狐视频、微视等列表播放视频功能的详细解析
短信预约 -IT技能 免费直播动态提醒
这篇文章主要讲解了Android仿搜狐视频、微视等列表播放视频功能的详细解析,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
最近项目中需要是实现在列表中自动播放视频,中间遇到了些问题,终于解决,特来跟大家分享一下:
列表使用的RecyclerView 播放视频使用MediaPlayer+TextureView。
主要思路:
监听RecyclerView的滑动,开始滑动时停止正在播放的item。
通过LinearLayoutManager 获取当前显示的第一个item及最后一个item
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(); }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Android仿搜狐视频、微视等列表播放视频功能的详细解析
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Android仿搜狐视频、微视等列表播放视频功能的详细解析
这篇文章主要讲解了Android仿搜狐视频、微视等列表播放视频功能的详细解析,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。最近项目中需要是实现在列表中自动播放视频,中间遇到了些问题,终于解决,特来跟大家分享一下
2023-05-30