直播软件搭建类似抖音直播间滑动加载页
现在很多直播软件都具备无限循环加载的功能还有就是群聊图片预览,这节就分析一下,这种功能的实现。
1.ViewPager的制作无限循环
2.RecylerView滑动,使它可以定在其中的完整的一格
3.自定义View和Layout达到滑动效果。
先给大家看看ViewPager的做法吧。其至少需要4个View来完成对象复用
直播软件搭建类似抖音直播间滑动加载页
直播软件搭建类似抖音直播间滑动加载页这里数据变更的时候,ViewPager会强制要求你刷新界面。如果你滑动的时候在 络获取数据地址,ViewPager强制刷新,你就发现突然黑屏了一下。。。这体验,真的非常差的。。。
Viewpager是没提供局部刷新的方法的,所以这个bug也无法修复,除非你重写整个Viewpager了,但是这样也不利于后续优化维护。
如果滑动是循环且数量是确定的,可以采取这种方案,但是需要动态更新数据,就不能采取这种方案了,体验很差。 直播滑动和在线图片轮播是需要动态加载,所以此方案不适用。
2.使用RecylerView的卡位的方案,这里非常简单,只需要PagerSnapHelper直接关联RecylerView,ReyclerView会直接完成View复用。而RecylerView拥有局部刷新的接口功能,所以不会出现闪屏的功能。
局部向前刷新
局部向后刷新
SnapHelper还有一个居中的效果的LinearSnapHelper
直播软件搭建类似抖音直播间滑动加载页这里如果还需要判断视频播放时机,需要复写LayoutManager的方法。可以参考下面的文章 Android中模仿抖音的滑动RecycleView的实现
有这个PageRecylerView的开源库,但是反射了使用了RecylerView的mViewFlinger对象,如果上线google play是无法使用的。
https://github.com/ckrgithub/PageRecyclerView
3.自定义layout 这个开源是大神五年前写的,感觉就是ViewPager的原版。数据变更也需要强刷整个页面,所以会有闪屏的问题,需要改写刷新页面的方式为局部刷新。
https://github.com/castorflex/VerticalViewPager
……2018.7.17更新…… 1.如果播放器存在进度条,那么recylerView就需要划分一个区域,触摸事件向下传递,复写拦截事件。
2.使用Exoplayer播放,ExoPlayerView,播放(true)和暂停(false)都是使用setPlayWhenReady,如果你使用了stopVideo来暂停,当recylerView滑动后再划回来会黑屏。一个ExoPlayerView,无法设置两次prepare MediaSource作为替换,不然会显示AudioFlinger could not create Task。
3.Exoplayer,如何视频太短(1~3秒)恢复过来会有黑屏的问题。视频有时候也会因为recylerView切换后无法卡在停止的那帧,无法播放。解决的方法是使用RecylerView onChildViewAttachedToWindow的时候,重新设置进度播放进度。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!