Android项目实战之高仿网易云音乐项目介绍

这一节我们来讲解这个项目所用到的一些技术,以及一些实现的效果图,让大家对该项目有一个整体的认识,推荐大家收藏该文章,因为我们发布文章后会在该文章里面加入链接,这样大家找着就很方便。

目录
第1章 前期准备
第1节 项目介绍

记得那是很多年前,我们去网吧的时候,都会用到酷狗音乐,因为他有卡拉OK歌词滚动,然后在玩着游戏,开着歌词显示到游戏前面感觉逼格很高,那时候还不知道网易云音乐这软件,所以当就想着卡拉OK歌词这么神奇,我要是能做出来就好了,但是很遗憾那时才上高中,也就学了点C语言写写单片机而已,还写不出这么高大上的功能;直到后来上班不知怎么遇到了网易云音乐,就用上了,也说不出网易云音乐有多好,甚至连卡拉OK歌词都没有,但是就感觉他的界面做的没那么复杂,如果你去看看其他的音乐软件就会发现界面有点复杂;虽然后面上班后也会一些技术了,但很遗憾的是上班后根本就没有时间,天天都是需求Bug,不是领导催就是测试催,不是测试催就是产品催,不是产品催就是UI催...,周末就更不想写了,就想睡觉,现在辞职创业了也有时间了,所以就做这样一门课程,也来完成我们多年的一个梦想,来写一个我的云音乐,大体的界面和交互逻辑和网易云音乐类似,主要是学习和巩固在Android中如果实现,音乐播放,视频播放,卡拉OK歌词,LRC歌词,以及桌面歌词,聊天,动态等功能,这一系列的文章我们会先后讲解Android的实现,iOS的实现,服务端的实现,Mac系统的时候,Windows系统的实现等平台,让大家能学习一个完整的知识体系,虽然学完以后做不了牛逼的全栈,但是你会体验到每个平台,每个语言的不同和精髓,这对大家是有帮助的。

我们这里仿照的版本是Android App 5.2.0.437608。

针对原版App最大的改进就是支持卡拉OK歌词,原版App是逐行滚动。效果图如下:


ksc.jpg

LRC逐行滚动歌词效果如下:

lrc.png

下面就对我们项目用到了一些技术和框架做一个整体介绍,让大家对该项目有一个整体的认识:

网络框架:OKHttp,选用他的目的是可以通过拦截器很好的扩展他,同时他也可以很好的配合RxJava和Retrofit这样的框架来完成请求,但是我们项目中可以只用到了这个框架的10/1的功能,所以想深入学习的朋友们请学习我们的推出的《详解OkHttp》课程。

在通知栏显示请求:chuck-library,用这个框架是可以从通知栏中查看到每一个请求,好处是不需要在电脑上抓包,也不需要给手机配置代理,特别打测试包时,测试人员也能通过这个看到,到底是客户端还是服务端问题一目了然,还有就是很多时候服务端让你给他发一个请求的请求参数等,用了这个库后,给他一个包,让他们爱怎么倒腾怎么倒腾,不用每次都找我们开发人员,从而专注工作,争取不加班。该框架在不会打包到线上环境中。效果如下图:


request_list.png

可以通过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。效果如下图:

list_detail.png

CardView:该框架是Android官方提供的,可以用来实现圆角和阴影,详细的使用我们也在《详解Material Design》课程讲解了。效果可以查看下面的,首页图,发现Banner,还有Item都是有圆角的效果。

PhotoView:用来手势缩放图片,用在查看专辑大图时。

glide-transformations:该框架是用来结合Glide使用的一个图片处理特效库,提供了很多动画,我们这里用到的是高斯模糊效果,用在播放界面背景效果图。效果如下图:


cd.png

MagicIndicator:用来代替TabLayout实现指示器效果,因为TabLayout自定义度要小一点。在首页的效果如下图:


home.png

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提供了兼容库可以让我们很方便的实现;用在评论和动态界面。效果如下:


comment.png

Multidex:使用的是Android官方提供的;当然你可以通过Gradle来自己实现分包。

动态流布局:flow-layout,用来实现像热门搜索这类流式布局。效果如下图:


search.png

第三方登录和分享:第三方登录使用的是ShareSDK。

LRecyclerView:使用它来实现对RecyclerView添加头部和下来刷新功能;如果想深入学习实现的朋友可以学习《详解RecyclerView》课程。

下载框架:AndroidDownloader,这是我们开源的一个下载框架。效果如下图:


![user_detail1.jpg](https://upload-images.jianshu.io/upload_images/10855146-8b8c0f2a903b97f5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Toolbar,CoordinatorLayout:可以说CoordinatorLayout是Android Design包中最复杂控件之一一点儿也不为过,因为他扩展性超强,详细的使用方法和源码分析在《详解Material Design》课程中讲解了。基本上所有界面都用到了Toolbar,CoordinatorLayout,但效果就是用户详情页页面的TabLayout悬停效果,默认如下图:

user_detail1.jpg

TabLayout悬停的效果如下:

user_detail2.jpg

数据库:使用了的是LiteOrm,同类框架有GreenDao他的使用到的类需要每次生成,但是网上的测试都说他效率更高,具体的我们暂时没有做个相关的测试,OrmLite。

聊天:使用到的融云IM,不带UI的那种,因为大部分请求下集成聊天都要自定义UI,同时也只有学会了自定义UI如何使用一个框架,那么以后在集成环信,腾讯IM等框架道理都是一样的;另外选择融云是因为他有Ruby语言的SDK,这样服务端实现就很简单了。效果如下图:

chat.png

日期和时间:Joda-time,这个库在Java项目中使用很多,因为如果你经常使用Java自带的Api来处理日期和时间你就会发现很麻烦,所以说用该框架操作日期和时间是很方便的,还有一个点就是时区,所以我们服务端返回的时间都是ISO8601格式,而不是时间戳。

picture_library:用来选择图片,同类型的框架有很多,大家可以根据自己的喜好选择,而且选择图片难度也不到,所以也可以先学习下其他开源框自己在封装一个。用在发送动态和聊天发送图片。

阿里云OSS:用来发布动态时上传图片,现在很少有应用还自己存这些资源,好处是CDN,缓存等功能,不用担心性能和存储空间不够;同时他还提供水印,以及图片处理功能。

有米广告SDK:广告SDK可以说是很多,腾讯,360,小米都有;用在启动界面显示插屏广告。效果如下图:

splash_ad.jpg

效果的话和原版差不错,就是这个广告画风不太好。

跨界面通讯:这里使用的是EventBus,同类框架有饿了么也开源了一个。

Butterknife:用来快速绑定界面上的View和方法,该框架是基于APT实现,所以大家不要面试不懂千万不要说,这不就是注解实现的吗。

本课程中不会涉及到的内容,因为是本课程这是第一版本,不会涉及到MVP,MVVM,Kotlin等相关的技术,后续我们会在该课程的基础上用相应的基础实现,第一版要专注实现核心功能,而不是各种设计模式,各种架构。

注意:框架只是用来提高开发效率,并不能让你有多大的提高,也就说一个功能或者一个算法你实现不了,虽然用框架可能解决了问题,但是脱离了框架你就什么都不是了,所以大家平时还是要多深入学习,而不是仅仅停留在使用框架层面,只有这样才能让你走的更远。

如果感觉我们写的不错,可以支持我们一下,本项目提供的在线电子书在线视频教程,在官网购买可以优惠5元哟,同时视频课程也可以在网易云课程,腾讯课堂上购买,如果有任何问题可以添加我们的QQ来讨论:3469271680;评论可能回复不是很及时,还望大家体谅;购买课程后可以获得一对一答疑服务,当然也可以谈人生谈理想瞎扯淡;同时如果是零基础想学编程的朋友也可以联系我们进行咨询,我们可以提供一些建议和帮助,让你在编程道路上更顺畅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,960评论 3 119
  • 预算:硬装6,软装4,电器2 必备:净水器,地暖
    璀璨同阅读 156评论 0 0
  • 在11周和17周分别做了初次和中期唐筛。 初次唐筛没有什么问题,21三体和18三体都是低风险,没想到第二次唐筛21...
    拉格朗日阅读 1,358评论 3 0
  • 总不能用一身的刺去拥抱无辜的人,认识就够了,何必谈余生。 《虞美人》 清...
    马圣理阅读 158评论 0 0