仿抖音
2020.8.18
fragment+tabLayout搭建首页
lottie播放json动画
首页使用ViewPager2实现左右滑动
首页播放视频库选择ExoPlayer
首页播放视频上下滑动使用ViewPager2
下拉刷新自定义ViewPager
评论显示使用BottomSheetDialog
分页加载使用paging3
聊天使用环信SDK
图片加载使用Glide
用户信息使用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+
短视频录制使用美摄SDK
同城视频使用饺子Video
整体架构分为两个Fragment,他们被MainActivity通过ViewPager管理,左边为首屏能看见的所有内容,右边为作者信息。在首页播放推荐时间时右滑进入作者信息页面, 它应该是单独的功能,目前和我的公用一个界面。
视频在RecyclerView中的表现不理想,切换时由于播放器的准备时间,导致会有1秒时间左右的卡屏,即使播放本地的缓存视频也是,需要完成在滑动前播放器已做好准备, 针对此问题是否考虑不使用RecyclerView,而是ViewPager2,因为他提供了垂直滑动的支持,但是需要考察其是否有预加载的功能,目前已确定有预加载的功能- 此问题已通过ViewPager2预加载解决
播放器绘制后playerView宽高没有全屏播放,强制全屏播放导致视频拉伸 ×
按下Home后返回继续播放 √
按下其他tab页返回继续播放 √
屏幕不可以旋转 √
滑动过程中页面的绘制表现不理想,页面没绘制好,完全显示后页面还有变化,经过排查在fragment中有这个问题,在Activity中表现正常,考虑从fragment找方法解决-预加载可以解决此问题
通过seek将切换过的视频恢复起始位置会导致卡顿-改为切换视频时继续播放,而不是从新开始 - √
抖音播放视频Ui有圆角效果 在抖音的apk中找到四个圆角图片..... √
监听播放的进度动态修改SeekBar √
获取总时间,设置给SeekBar - 实现
视频在播放过程中的监听,视频在开始播放后,按秒定时查询进度并更新 -实现
监听SeekBar的事件,当用户滑动结束时 视频需要跳到对应位置播放-实现
滑动后长按SeekBar时,SeekBar会移动导致闪烁,在down之后就禁止SeekBar移动-实现
首页TabItem重复点击执行刷新 √
模拟耗时操作
增加ViewModel实现Activity与Fragment数据共享,
模拟请求到数据,改变视频
请求结束后将icon替换为文本
下拉刷新动画 √
自定义ViewPager,使用外部拦截法,将事件作为回调交由外部,顶部TabLayout执行平移加透明的动画
视频加载卡住时,是有进度条动画的,考虑可能是json动画,如何监听Exoplayer的加载,?playerStateChange方法能收到卡顿回调吗? √
音量变化时,底部有进度条提示 √
关注和推荐同时构建,同时播放问题 -关注不再提供视频播放 √
首页添加赞,聊天,分享等等功能UI √
评论的弹窗ui √
评论使用RecyclerView多Type
点击写评论时,buttomSheetDialog不应该被顶起 √
写评论的dialog应该全部上移在软键盘之上 √
获取软键盘的弹出和高度动态移动表情显示 √
视频文案是可跳转的 √
视频bgm文本跑马灯 √
视频分享 √
视频点赞使用json动画 √
视频双击点赞自定义View执行旋转平移透明度动 画 √
评论输入弹窗bttomSheetDialog导致视频上移挤压 -adjustPan解决√
评论默认的一条没有显示 √
保持屏幕常亮 √
关注的查看通讯录功能 ×
默认选中第一个ViewPager页后需要等到视频加载出来才能显示 √
遗留问题:播放视频的View模式,无法适应所有视频,比如设置为填充屏幕,部分视频就拉伸了。在使用其他视频播放器库后,参考其他库的实现看看能否解决Exoplayer这个问题。
个人信息与首页左滑显示的作者信息复用,之后统称用户信息
用户信息不再使用Exoplayer播放视频,目前决定使用jiaozivideoplayer,不过国产的东西资料确实多
个人信息首页下拉效果
下拉图片放大 √
上滑动显示标题栏为黑色 √
上滑动TabLayout停靠标题栏下方 √
下拉动作结束后到顶部后图片有惯性回弹效果 √
监听AppBarLayout的偏移量,当偏移量为0且是往下滑动时放大图片,
监听手势速度
确定connView是否有overScrollBy方法
上滑动的图片滑动速度比其他内容要慢 √
当TabLayout切换时导致CoordinatorLayout接收不到MOVE事件,导致无法再滑动时放大顶部的背景,通过设置ViewPager的offscreenPageLimit可解决, 具体解决方案:https://www.jianshu.com/p/936d575af6b9 √
播放的页面是复用的,比如那些音量控制之类的功能不可能重复编写,所以需要作品单独显示,点击播放时切换适配器?注意查看抖音怎么做的,点击播放后返回是返回作品还是退出应用
下拉时超过用户昵称需要将昵称显示在Toolbar上,实现:监听滑动,实时查询View距离顶部Toolbar的距离。
增加分页功能。使用Paging3
播放视频使用饺子Video
增加即时通讯功能,集成环信:
下载环信SDK,按照需求添加对应的库到应用
注册用户(环信不保存用户信息)
登录
添加接收消息的监听,在环信管理平台直接发送消息测试接收消息功能
获取所有会话,使用列表显示
获取好友列表
获取聊天记录
发送消息
接收消息
录制短视频
寻找商用的短视频库,个人用户的开源库问题很多也不会经常升级维护
趣拍云
涂图
美摄
选择美摄了,虽然他的清晰度不太好,但是他们注册用户比较简单,我使用的是免费功能。至于收费功能是不是清晰度有提高就不清楚了,再说一下涂图, 首先Demo跑起来大概几秒后调了下亮度然后直接崩溃,之后就打不开了一直崩溃。而且注册账号还要上传身份证认证?????不过他的清晰度真不错。 至于集成过程我没有仔细去查看美摄的文档,而是使用他的Demo里的代码,因为不想写ui,工作量太大。
使用lottie加载json动画的优势在哪,为什么不使用gif?
gif占用空间大,需要做适配,线上还可以卡死
帧动画比gif占用空间更大
json动画占用空间小,开发成本也不高,ios,android只需要使用一套Json文件,可以通过服务端动态获取json文件更新动画
使用ViewPager2滑动视频比RecyclerView的优势?