登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 129|回复: 0

Android 高仿腾讯新闻视频切换效果

[复制链接]

357

主题

361

帖子

7286

安币

手工艺人

发表于 2019-4-15 10:10:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-822721-79872.html

#### 是的,你没看错,又是腾讯视频!又是高仿!没办法啊,产(傻)品(子)喜欢抄袭别人![Picture](//upload-images.jianshu.io/upload_images/5135586-961fc11c8dfbb80c.jpg)#### 还是上效果图吧(渣渣千元机,有点卡)![Picture](//upload-images.jianshu.io/upload_images/5135586-830728af306861c7.gif)同样是新闻客户端,为什么你这么优秀。![Picture](//upload-images.jianshu.io/upload_images/5135586-1a7f9560701b9579.jpg)好了,吐槽完毕,看看demo的效果。![Picture](//upload-images.jianshu.io/upload_images/5135586-77136ca401c5eff6.gif)跟原效果还是有点差别的。![Picture](//upload-images.jianshu.io/upload_images/5135586-519044709620732f)### 拆解一下页面效果吧:- 新闻页面视频滚动到屏幕中间自动播放(wifi下,demo没有判断)- 点击视频,页面切换到视频列表页面,期间视频不会停止播放,平滑过渡到第二个页面- 视频列表页面滑动后,播放第一个完全可见的视频(个人理解,理解错了大佬不要打我)- 视频列表页面,视频播放时,点击评论数,切换到评论页面,效果同上- 视频列表页面,视频播放时,点击其他item任意区域,该item滑到顶部,并播放视频无缝续播这里不做讲解(其实我也不会呀...),做过播放器的应该都懂吧,原理大致就是:```解码器动态关联不同的渲染视图(RenderView),比如使用MediaPlayer动态关联SurfaceView,就如同一个电脑主机不断连接不同的显示器。```PS:这里注意一下,render不要重置,不然会闪屏哦Demo中用的是这个播放器 [PlayerBase](https://github.com/jiajunhui/PlayerBase),高度解耦(不像其他播放器一样,对布局文件有限制),支持各种自定义,最大的好处的就是提供能无缝续播助手(续播的话不要使用mediaPlayer,会出现问题)。![Picture](//upload-images.jianshu.io/upload_images/5135586-4f2ebcfcec15a405.jpg)### 播放器相关这里还是简单说下播放器怎么用吧,不需要改界面的话(demo中略微做了修改),直接拷下面红色方框中的类,在Application里面进行配置就可以使用啦(ijk,exo需要引入对应的库哦,demo中ijk不支持https,所以视频可能不能播放)。![Picture](//upload-images.jianshu.io/upload_images/5135586-1fed0203457fe837.png)无缝续播相关都在*RelationAssist*类里。续播的话直接调用```AssistPlayer.get().play(mContainer, null);```就可以在不同的容器内(即上面的mContainer)继续播放之前的内容了。需要自定义界面或者有其他问题的参考[这里](https://juejin.im/post/5b0d4e6bf265da090f7376d2)和(https://github.com/jiajunhui/PlayerBase)[demo],有问题的加群问群主吧。#### 新闻列表页用RecyclerView实现,这里说一下页面滑动对视频item的处理:当页面停止滑动后,判断是屏幕中央是否有可见的视频item,有则开始播放。同时,判断之前是否有在播放的视频滑出了界面,有则停止播放。```//伪代码if (newState == SCROLL_STATE_IDLE) {            //滑动屏幕中间开始            LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();            int first = manager.findFirstVisibleItemPosition();            int last = manager.findLastVisibleItemPosition();            for (int i = first; i
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表