Skip to content

duoshine/douyin

Repository files navigation

douyin

仿抖音

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的优势?

About

仿抖音

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published