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

目录
第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;评论可能回复不是很及时,还望大家体谅;购买课程后可以获得一对一答疑服务,当然也可以谈人生谈理想瞎扯淡;同时如果是零基础想学编程的朋友也可以联系我们进行咨询,我们可以提供一些建议和帮助,让你在编程道路上更顺畅。

Android项目实战之高仿网易云音乐项目介绍的更多相关文章

  1. Android项目实战之高仿网易云音乐创建项目和配置

    这一节我们来讲解创建项目:说道大家可能就会说了,创建项目还有谁不会啊,还需要讲吗,别急听我慢慢到来,肯定有你不知道的. 使用项目Android Studio创建项目我们这里就不讲解了,主要是讲解如何配 ...

  2. 新鲜出炉高仿网易云音乐 APP

    我的引语 晚上好,我是吴小龙同学,我的公众号「一分钟GitHub」会推荐 GitHub 上好玩的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注我. 项目中成长是最快的,如何成长,就 ...

  3. 2.Android高仿网易云音乐-引导界面和广告界面实现

    效果图 效果图依次为图片广告,视频广告,引导界面. 系列文章目录导航 目录 1.实现分析 广告界面就是显示图片和视频,所以可以放一个图片控件,视频控件,然后跳过按钮,提示按钮,WiFi预加载提示都是放 ...

  4. Android高仿网易云音乐-启动界面实现和动态权限处理

    效果 实现分析 基本上没有什么难点,就是布局,然后显示用户协议对话框,动态处理权限,判断是否显示引导界面,是否显示广告界面等. 布局 <?xml version="1.0" ...

  5. 3.Android高仿网易云音乐-首页复杂发现界面布局和功能/RecyclerView复杂布局

    0.效果图 效果图依次为发现界面顶部,包含首页轮播图,水平滚动的按钮,推荐歌单:然后是发现界面推荐单曲,点击单曲就是直接进入播放界面:最后是全局播放控制条上点击播放列表按钮显示的播放列表弹窗. 1.整 ...

  6. 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目

    CloudReader 一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material Desgin阅读类的开源项目.项目采取的是Retrofit + RxJava + ...

  7. Flutter仿网易云音乐:播放界面

    写在前头 本来是要做一个仿网易云音乐的flutter项目,但是因为最近事情比较多,项目周期跨度会比较长,因此分几个步骤来完成.这是仿网易云音乐项目系列文章的第一篇.没有完全照搬网易云音乐的UI,借鉴了 ...

  8. C# WPF 低仿网易云音乐(PC)Banner动画控件

    原文:C# WPF 低仿网易云音乐(PC)Banner动画控件 由于技术有限没能做到一模一样的动画,只是粗略地做了一下.动画有点生硬,还有就是没做出网易云音乐的立体感.代码非常简单粗暴,而且我也写有很 ...

  9. C# WPF 低仿网易云音乐(PC)歌词控件

    原文:C# WPF 低仿网易云音乐(PC)歌词控件 提醒:本篇博客记录了修改的过程,废话比较多,需要项目源码和看演示效果的直接拉到文章最底部~ 网易云音乐获取歌词的api地址 http://music ...

随机推荐

  1. 【集合系列】- 深入浅出的分析 Properties

    一.摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap.LinkedHashMap.TreeMap.IdentityHashMap.WeakHashMap.Hashtable.P ...

  2. Ubuntu 18.04 环境下 kubernetes v1.16.2 单机部署说明

    一.安装环境 本次部署使用阿里云ECS 操作系统: Ubuntu  18.04 64位 实例规格: ecs.c6.large 2U4G 二.kubernetes 版本 k8s.gcr.io/kube- ...

  3. 强化学习七 - Policy Gradient Methods

    一.前言 之前我们讨论的所有问题都是先学习action value,再根据action value 来选择action(无论是根据greedy policy选择使得action value 最大的ac ...

  4. Redis第二讲【Redis基本命令和五大数据结构】

    [二.Redis基本命令和五大数据结构] redis的基础知识和命令 redis 是一个单进程(包装epoll函数来对读写事件进行相应) 默认有16个数据库,初始使用的数据库为0号库 默认端口为637 ...

  5. 使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader

    前言 之前写过一篇旧React项目升级使用TypeScript的文章:在React旧项目中安装并使用TypeScript的实践. 博客里使用awesome-typescript-loader对Type ...

  6. firefox浏览器写xpath

    最近在学xpath发现Firefox浏览器不支持xpath定位页面元素 百度为例: F12 页面前端代码  输入最简单的xpath发现并不能定位元素 解决方案:添加 Try Xpath 这个插件,因为 ...

  7. angular实现draggable拖拽

    前言:最近项目要实现一个拖拽功能,我在网上开始了各类搜寻,虽然后面因为数据原因舍弃了拖拽的这一需求,但是为了不辜负最近的研究,还是来记录一下. 场景需求:面试预约选时间节点,候选人之间是可以相互交换的 ...

  8. ORA-19625: error identifying file

    问题描述:rman进行备份的时候,出现报错ORA-19625,无效的文件 1.进行数据库备份,然后就出现了报错,没有这个24号的归档日志 RMAN> run{ 2> allocate ch ...

  9. android开发检测用户是否使用了虚拟定位

    在应用开发中,如果有签到打卡之类的功能,你是否会遇到检测用户是否使用了虚拟定位软件来进行打卡?如果有,那么请仔细阅读这篇文章.该文章会带你认识什么是虚拟定位.什么是应用分身,以及如何通过代码来检测用户 ...

  10. BOM对象——History

    BOM对象--History <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...