CharlieCaptain2022年08月06日
521阅读

作品详情

画⾳(原POP IM),由前微信唯⼀ P4 级⼥产品总监 Genie Lin 出品,于 2018 年 9 ⽉正式上线,定位为社交通讯软件,主打功能有「Popper 造型」、「贴纸相机」、「视频短信」、「AR 魔术贴」、「故事墙」等。画⾳曾⼊榜 App Store 社交类 App 热榜前 30 名,获得⻉塔斯曼亚洲投资基⾦ 2000 万美元融资。

项目框架:

项目整体采用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
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论