概览

Android - 直播布局(1)
Android - 直播布局(2)


Android - 直播布局(1)

2020 年以来,因为疫情原因,直播格外的火。很多应用都引入了直播功能,我在写直播布局的时候,遇到了不少的问题,为了让后人少踩坑,写了个 Demo,希望能对以后做直播的人有所借鉴。


演示

]

项目地址:
https://github.com/ilpanda/live_demo

apk 下载地址(在 Github 上,下载可能较慢):

https://github.com/ilpanda/live_demo/blob/master/app-release.apk


基本功能

Demo 实现的功能仅仅是布局,没有实现直播以及 IM 功能,因为这些功能基本用的都是第三方服务,如腾讯云直播、阿里云直播。

直播布局以京东、淘宝直播为参照。直播布局支持的基本功能:

  1. 支持竖屏和横屏两种样式,支持横屏全屏。
  2. 支持上下滑动。京东和淘宝的直播都是支持上下无限滑动的。

上下滑动布局分析

直播和 IM 是比较消耗资源的,因此创建这些组件时都是使用的单例。直播布局支持上下滑动,也就意味着视觉上是多个直播布局,但实际上同一时刻只有一个直播。

上下滑动的组件大家首先会想到 RecyclerView。直播上下滑动确实可以使用 RecyclerView ,但我选择使用 ViewPager ,原因有两个:

  1. RecyclerView 直播方面可用的参考资料比较少。

  2. 京东、天猫等主流 App 使用的都是 ViewPager 来做上下滑动,因此我推测使用 RecyclerView 会有一些坑,所以直接使用了 ViewPager 来做上下滑动 。(使用 Android SDK 中的 uiautomatorviewer 可以查看其它 App 所使用的组件。)

系统自带的 ViewPager 只支持左右滑动,因此我们直接使用开源组件:https://github.com/castorflex/VerticalViewPager ,VerticalViewPager 支持上下滑动。Android 的新组件 ViewPager2 也支持竖直上下滑动,其内部是对 RecyclerView 的封装,但这里还是紧跟大厂的脚步。


京东上下滑动接口分析

京东、淘宝直播看起来像上下无限滑动,因为他们的直播多,并且可以根据用户的停留时间做个性化推荐直播。首先分析下京东的直播接口:

京东的直播在滑动时,主要请求了两个接口:

  1. 根据直播间的 id,请求直播间的详细信息。
  2. 根据当前直播的直播间 id ,以及直播列表的类型,获取上一个直播以及下一个直播,从而实现无限滑动。

这里主要贴下第二个接口(京东对接口做了校验,第二次请求时会失效,因此这里贴个图片,就不贴接口了):


Demo 中的上下滑动实现 - 方案(1)

接口在设计上,参照京东的接口。传递一个直播间 id , 服务器返回当前直播间、前一个直播间以及下一个直播间的信息,从而实现无限滑动。

接口地址:
https://www.hi-cat.cn/api/live/slide?liveId=

如果 liveId 传递值为空,则默认返回第一个直播间信息。


Demo 中的上下滑动实现 - 方案(2)

我们的业务没有那么多的直播,所以上下无限滑动的接口设计上和京东的不一样,使用列表分页接口,实现无限滑动,这种方案,客户端需要做很多的逻辑判断。

用户从直播列表进入直播间,携带如下参数,获取分页的列表数据:

  1. page:标识请求的第几页数据。
  2. count:每页的数据,一般为固定值,如 10 或者 20 个。
  3. liveId:在直播间列表点击的直播。这个参数不是传递给服务器,是客户端根据服务器返回的列表数据,确定应该移动到哪个直播间。之所以不传递 position,是因为用户点击进入直播间之后,直播可能已经结束。因此使用 liveId 和服务器传递的数据比对,如果不存在,则移动到当前列表的第一条数据。

接口地址:
https://www.hi-cat.cn/api/live?page=1&count=10


优劣

  1. 方案一,客户端很好处理,不需要额外的逻辑处理,需要后端支持。
  2. 方案二,后端直接返回分页后的直播间信息,客户端根据直播间 id 确定位置,需要客户端做额外的逻辑处理。

Android - 直播上下滑动布局(1)相关推荐

  1. Android - 直播上下滑动布局(2)

    概览 Android - 直播布局(1) Android - 直播布局(2) Android - 直播布局(2) 项目的基础结构 项目基础结构如下: BaseApplication 初始化日志以及 U ...

  2. Android滑动浮层(滑动布局中使其中子布局一个浮动)

    引言:     滑动浮层中,一般在一些详情界面,或者是一些大评论界面.一个内容比较多的单元,对其中的一部分内容控件做替换的展示(不排除有另类的产品定义)..这个可以点击替换的类似导航的布局,一般就是浮 ...

  3. android快速仿花椒,映客直播上下滑动切换直播间

    直播项目中竖版直播间原先没有上下滑动切换直播间的功能,需要加入滑动切换功能. 花椒直播效果: 我现在接手的项目由于直播间代码很多,最好是希望原代码都原封不动.翻看了几个app,发现花椒直播如果在播放视 ...

  4. Android直播软件搭建左滑右滑清屏控件

    Android直播软件搭建左滑右滑清屏控件 最近在迭代直播软件搭建功能时,项目中之前的左滑清屏是用ViewPager实现的.这次迭代遇到一个布局层次导致的点击失效问题,继续用ViewPager的话改动 ...

  5. Android实现左右滑动效果

    本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来 ...

  6. php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  7. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  8. android horizontalscrollview 动画,Android HorizontalScrollView左右滑动效果

    本文实例为大家分享了Android HorizontalScrollView左右滑动的具体代码,供大家参考,具体内容如下 效果图 一.什么是HorizontalScrollView Horizonta ...

  9. android滑动菜单图标,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

最新文章

  1. 【laravel7.x中文文档】Redis
  2. 《用Python进行自然语言处理》第7章 从文本提取信息
  3. 开源中国 Chrome 插件,你的好帮手~
  4. web服务器网站网速慢的原因,apache配置优化 - 解决apache环境下网站访问速度慢的问题...
  5. window中osmnx包的详细安装过程
  6. 前端学习(3064):vue+element今日头条管理-状态管理
  7. select * 和select 所有字段的区别
  8. VForum07之四:布道中国 解读本地化策略
  9. 如果一个人不喜欢争,不喜欢计较,只知道退让,是不是真的傻?
  10. Verilog语言与数字系统设计
  11. 加入MapReduce后完全分布式集群搭建
  12. 游戏开发中的向量数学
  13. 全国计算机自动化办公专业人才证书,急问懂计算机证书的人
  14. VLAN及VLAN间路由
  15. ENSP端口角色和状态
  16. shell编程99乘法口诀
  17. 机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
  18. matlab 动态图只能显示等平面吗,matlab平面浓度图
  19. javascript网页自动填表_javascript 自动填写表单
  20. 非暴力沟通简易思维导图

热门文章

  1. Java中的深拷贝与浅拷贝浅析
  2. 戴尔Dell Latitude E6410/E6510官方拆机图解维修手册
  3. Java JVM与内存管理
  4. 使命召唤手游需要的配置及要求
  5. 报错Failed to decode param
  6. from sklearn.utils.linear_assignment_ import linear_assignment
  7. 【Python】用Python实现简单网络电话
  8. Matlab中有用的机器学习文档
  9. 2022-2028全球与中国微型磁簧开关市场现状及未来发展趋势
  10. Ubuntu下如何将文件从一个地方移动到另一个地方