点击空白处退出提示
画音
我要开发同款作品详情
项目框架:
项目整体采用MVP模式,主要以Kotlin编码;使用Kotlin协程简化RxJava链式线程切换;通过gRPC协议进行通信;布局使用ViewBinding简洁绑定代码;使用LiveData解决内存泄漏的问题
主要负责、参与的模块节选:
相机拍摄模块
背景:画音支持多种拍摄模式,例如拍照、录像、说话就拍,相册选图,文本等。
方案:
运用策略模式,抽象模式类,子类实现具体逻辑,降低耦合,并实现该模块的可插拔
将Camera控制逻辑封装成CameraHelper,并在相机画面渲染GLSurfaceView中管理相机的状态
CameraHelper中将耗时操作都放到HandlerThread中运行,以免影响UI线程
说话就拍是运用状态模式,管理语音识别开启、暂停录制、以及多状态UI,拍摄完成后再加上字幕
相册选图模块
背景:从手机本地相册筛选符合条件的照片或视频,支持多场景,比如Story和Chat,支持多种模式,比如预览、单选和多选,支持视频压缩预览,支持多种手势,支持画面裁剪,支持从相机拍摄(实时预览)。
方案:
抽象RecyclerViewCursorAdapter,支持通过Cursor进行边滑动边加载数据
使用Glide加载数据,并将需要异步获取的信息通过payload通知ViewHolder,不必全量绑定,降低绑定耗时。
通过LoaderManger进行数据的监听和过滤,数据过滤支持排序,文件大小,文件格式等
视频压缩预览是在用户选择分辨率时,视频会在队列线程池进行压缩,成功后回调UI,压缩缓存文件可以用作后续发送,以免多次生成,否则会在定期资源清理时移除
涂鸦文字编辑模块
背景:拍摄后跳转到的是编辑界面,编辑界面功能多彩多样,其中贴纸涂鸦是用户最常用的功能,支持海量的贴纸,贴纸可以拖动放大,以及调整动画出现时间,除了贴纸,还能涂鸦和编辑文字,文字有7种字体,样式可带背景可换竖向排列。
方案:
定义gRPC枚举类型,多端统一,具体实现放在各端,实现视频和贴纸数据分开,使得贴纸预览时高清
通过自定义View来渲染贴纸(Sticker),使用Canvas绘制Drawable,方便拓展和包装不同类型的贴纸,例如动画贴纸
后台静默保存贴纸状态(序列化存数据库),以防App意外退出
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论