这一节我们来讲解这个项目所用到的一些技术,以及一些实现的效果图,让大家对该项目有一个整体的认识,推荐大家收藏该文章,因为我们发布文章后会在该文章里面加入链接,这样大家找着就很方便。
目录
第1章 前期准备
第1节 项目介绍
记得那是很多年前,我们去网吧的时候,都会用到酷狗音乐,因为他有卡拉OK歌词滚动,然后在玩着游戏,开着歌词显示到游戏前面感觉逼格很高,那时候还不知道网易云音乐这软件,所以当就想着卡拉OK歌词这么神奇,我要是能做出来就好了,但是很遗憾那时才上高中,也就学了点C语言写写单片机而已,还写不出这么高大上的功能;直到后来上班不知怎么遇到了网易云音乐,就用上了,也说不出网易云音乐有多好,甚至连卡拉OK歌词都没有,但是就感觉他的界面做的没那么复杂,如果你去看看其他的音乐软件就会发现界面有点复杂;虽然后面上班后也会一些技术了,但很遗憾的是上班后根本就没有时间,天天都是需求Bug,不是领导催就是测试催,不是测试催就是产品催,不是产品催就是UI催...,周末就更不想写了,就想睡觉,现在辞职创业了也有时间了,所以就做这样一门课程,也来完成我们多年的一个梦想,来写一个我的云音乐,大体的界面和交互逻辑和网易云音乐类似,主要是学习和巩固在Android中如果实现,音乐播放,视频播放,卡拉OK歌词,LRC歌词,以及桌面歌词,聊天,动态等功能,这一系列的文章我们会先后讲解Android的实现,iOS的实现,服务端的实现,Mac系统的时候,Windows系统的实现等平台,让大家能学习一个完整的知识体系,虽然学完以后做不了牛逼的全栈,但是你会体验到每个平台,每个语言的不同和精髓,这对大家是有帮助的。
我们这里仿照的版本是Android App 5.2.0.437608。
针对原版App最大的改进就是支持卡拉OK歌词,原版App是逐行滚动。效果图如下:
LRC逐行滚动歌词效果如下:
下面就对我们项目用到了一些技术和框架做一个整体介绍,让大家对该项目有一个整体的认识:
网络框架:OKHttp,选用他的目的是可以通过拦截器很好的扩展他,同时他也可以很好的配合RxJava和Retrofit这样的框架来完成请求,但是我们项目中可以只用到了这个框架的10/1的功能,所以想深入学习的朋友们请学习我们的推出的《详解OkHttp》课程。
在通知栏显示请求:chuck-library,用这个框架是可以从通知栏中查看到每一个请求,好处是不需要在电脑上抓包,也不需要给手机配置代理,特别打测试包时,测试人员也能通过这个看到,到底是客户端还是服务端问题一目了然,还有就是很多时候服务端让你给他发一个请求的请求参数等,用了这个库后,给他一个包,让他们爱怎么倒腾怎么倒腾,不用每次都找我们开发人员,从而专注工作,争取不加班。该框架在不会打包到线上环境中。效果如下图:
可以通过Chrome抓包:stetho,该工具是Facebook开源的,可以在Chrome浏览器中抓包,好处是开发的时候不用去触摸到手机,直接在电脑上抓包就行了,毕竟大多数程序员就很懒,例如我就是;像微信每次电脑登录的都的扫码,想想都心累,所以就基本不用微信,明明可以记住密码。该框架在不会打包到线上环境中;该库有个缺点是依赖Chrome,还有就是第一次打开抓包界面需要翻墙,所以基于这些点其他人员使用就很麻烦,而上面哪个库就没这些问题。
JSON解析:Gson,该框架时Google开源的,同类的框架有FastJSON,JackSON到他们那个好,我们暂时还没做个相应的测试,如果那么朋友知道做个可以在添加我们的QQ进行讨论。
图片加载框架:Glide,该框架是Google一位员工开发的,但不是官方项目,这一点大家要注意,同时在官方仓库中也注明了。该框架有一个好处就是他可以获取到当前ImageView的尺寸,然后我们可以通过这一点来动态裁剪图片,例如:一个列表显示的图片尺寸为200PX,而原图是1000PX,所以在列表界面就没必要加载原图了,可以直接裁剪成200PX显示,这样既省流量加载速度又快,同类框架有Picasso,Fresco,具体的我们后面会推出一门关于Android图片加载框架的课程,会综合所有图片加载框架,先分析源码,然后总结出每个框架的有点和缺点,如果有必要可以综合所有框架有点在打造一个框架。
Palette:该框架是Android官方提供的调色板库,简单来讲就是可以同图片中提取出多个颜色,比如:明亮的,柔和的等,该框架虽然简单但逻辑还是稍微有一点复杂,因为他内部用到了颜色减值算法,同时我们在《详解Material Design》课程中分析的源码,还将该框架移植到iOS和Python。效果如下图:
CardView:该框架是Android官方提供的,可以用来实现圆角和阴影,详细的使用我们也在《详解Material Design》课程讲解了。效果可以查看下面的,首页图,发现Banner,还有Item都是有圆角的效果。
PhotoView:用来手势缩放图片,用在查看专辑大图时。
glide-transformations:该框架是用来结合Glide使用的一个图片处理特效库,提供了很多动画,我们这里用到的是高斯模糊效果,用在播放界面背景效果图。效果如下图:
MagicIndicator:用来代替TabLayout实现指示器效果,因为TabLayout自定义度要小一点。在首页的效果如下图:
commons-lang3:是Apache开源的一个常用工具类,同样在Java中也是经常使用,他提供了ObjectUtils,RandomUtils,SystemUtils,StringUtils等工具类;我们这里用到了StringUtils。
commons-io:同样还是Apache开源的一个常用工具类,可以从名字看出来是针对IO操作的,我们这里用到了FileUtils,因为大家经常用Java就会发现Java操作文件很麻烦,各种类不要太多,不信你可以随便找个做Java几年的人问,基本上说不出Java中和IO相关的类和继承关系;当然我们这里使用了OkHttp,而OkHttp又引用了OkIO,所以你可以通过OkIO来操作文件,关于OkIO的部分我们后面会增加到《详解OkHttp》课程中。
Emoji:以前的Android版本不支持Emoji,所以只能自己实现,现在Google提供了兼容库可以让我们很方便的实现;用在评论和动态界面。效果如下:
Multidex:使用的是Android官方提供的;当然你可以通过Gradle来自己实现分包。
动态流布局:flow-layout,用来实现像热门搜索这类流式布局。效果如下图:
第三方登录和分享:第三方登录使用的是ShareSDK。
LRecyclerView:使用它来实现对RecyclerView添加头部和下来刷新功能;如果想深入学习实现的朋友可以学习《详解RecyclerView》课程。
下载框架:AndroidDownloader,这是我们开源的一个下载框架。效果如下图:
Toolbar,CoordinatorLayout:可以说CoordinatorLayout是Android Design包中最复杂控件之一一点儿也不为过,因为他扩展性超强,详细的使用方法和源码分析在《详解Material Design》课程中讲解了。基本上所有界面都用到了Toolbar,CoordinatorLayout,但效果就是用户详情页页面的TabLayout悬停效果,默认如下图:
TabLayout悬停的效果如下:
数据库:使用了的是LiteOrm,同类框架有GreenDao他的使用到的类需要每次生成,但是网上的测试都说他效率更高,具体的我们暂时没有做个相关的测试,OrmLite。
聊天:使用到的融云IM,不带UI的那种,因为大部分请求下集成聊天都要自定义UI,同时也只有学会了自定义UI如何使用一个框架,那么以后在集成环信,腾讯IM等框架道理都是一样的;另外选择融云是因为他有Ruby语言的SDK,这样服务端实现就很简单了。效果如下图:
日期和时间:Joda-time,这个库在Java项目中使用很多,因为如果你经常使用Java自带的Api来处理日期和时间你就会发现很麻烦,所以说用该框架操作日期和时间是很方便的,还有一个点就是时区,所以我们服务端返回的时间都是ISO8601格式,而不是时间戳。
picture_library:用来选择图片,同类型的框架有很多,大家可以根据自己的喜好选择,而且选择图片难度也不到,所以也可以先学习下其他开源框自己在封装一个。用在发送动态和聊天发送图片。
阿里云OSS:用来发布动态时上传图片,现在很少有应用还自己存这些资源,好处是CDN,缓存等功能,不用担心性能和存储空间不够;同时他还提供水印,以及图片处理功能。
有米广告SDK:广告SDK可以说是很多,腾讯,360,小米都有;用在启动界面显示插屏广告。效果如下图:
效果的话和原版差不错,就是这个广告画风不太好。
跨界面通讯:这里使用的是EventBus,同类框架有饿了么也开源了一个。
Butterknife:用来快速绑定界面上的View和方法,该框架是基于APT实现,所以大家不要面试不懂千万不要说,这不就是注解实现的吗。
本课程中不会涉及到的内容,因为是本课程这是第一版本,不会涉及到MVP,MVVM,Kotlin等相关的技术,后续我们会在该课程的基础上用相应的基础实现,第一版要专注实现核心功能,而不是各种设计模式,各种架构。
注意:框架只是用来提高开发效率,并不能让你有多大的提高,也就说一个功能或者一个算法你实现不了,虽然用框架可能解决了问题,但是脱离了框架你就什么都不是了,所以大家平时还是要多深入学习,而不是仅仅停留在使用框架层面,只有这样才能让你走的更远。
如果感觉我们写的不错,可以支持我们一下,本项目提供的在线电子书和在线视频教程,在官网购买可以优惠5元哟,同时视频课程也可以在网易云课程,腾讯课堂上购买,如果有任何问题可以添加我们的QQ来讨论:3469271680;评论可能回复不是很及时,还望大家体谅;购买课程后可以获得一对一答疑服务,当然也可以谈人生谈理想瞎扯淡;同时如果是零基础想学编程的朋友也可以联系我们进行咨询,我们可以提供一些建议和帮助,让你在编程道路上更顺畅。