LRC歌词原理和实现高仿Android网易云音乐

大师好,我们是爱学啊,今天给大师带来一篇关于LRC歌词道理和在Android上如何实现歌词逐行滚动的结果,逐字滚动下一篇文章讲解。

工具/原料

  • Android Studio

结果图

  1. 1

    相信大师都懂一张图胜过千言万语。

  2. 2

    结果和此刻市道上年夜部门播放器差不多,当然若是要运用到贸易项目中,必定还需要进行一些优化,例如:滚动结果有弹性,字体大小,字体颜色等。

什么是LRC歌词

  1. 1

    LRC是英文Lyric(歌词)的缩写,常用作逐行歌词扩展名。他是纯文本文件,格局简单,能实现歌词逐行滚动;当然今朝业界年夜部门播放器都是在他的根本上定制了,但根基道理一样,当学完我们这篇文章后,大师也可以按照本身的需求定制。

LRC歌词格局

  1. 1

    在实现歌词功能前,必定需要搞大白LRC歌词格局,例如:我们找了一段LRC歌词:

  2. 2

    可以看到内容是用换行符朋分的,若是这些数据是经由过程接口返回,而不是直接返回一个LRC文件,那么这里面的换行符应该变为\n换行符,这一点我们也在课程中讲解到了。

    每一行是一句歌词;每一行歌词又分为两部门,中括号里面是当前这行歌词的起头时候,格局为分:秒:毫秒,有些歌词可能没有毫秒,只有秒;歌词开首因为部门数据称为LRC元数据,他是用来描述这个歌词的,部门字段诠释如下:

  3. 3

    前面这些字段按照分歧的播放器可能用的位置纷歧样,我们课程中固然解析了这些字段,但也没有效到。

歌词滚动道理

  1. 1

    将每行歌词前面的时候解析后,转为毫秒,如许播放器在播放的时辰可以获取到播放时候,然后拿着时候查找当前时候对应哪一行歌词,然后在界面上高亮这一行歌词,或者做更多的处置,例如:字体增年夜等操作;就实现了歌词逐行高亮;至于滚动分歧的平台纷歧样,滚动思绪是:获取到当前时候所对应哪一行,然后我们必定能算出每一行歌词高度,所以行*每一行高度就是滚动的高度。

歌词解析

  1. 1

    分歧的说话语法纷歧样,我们这里先说思绪,我们的实现是Java说话。

    读取该文件每一行,然后用]拆分,第二部门就是歌词,第一部门继续用:拆分,然后将三部门转为毫秒;最后将这些信息保留到对象上。

    当然为了今后更好的扩展,因为歌词格局良多,可以进行一些架构:

歌词绘制

  1. 1

    分歧的平台也纷歧样,我们这里是Android,所以绘制用Canvas。我们这里的思绪是:歌词View的高度是固定的,因为我们但愿当前行歌词始终显示到歌词View中心,所以先算出View的中间高度,然后在该位置绘制当前行歌词,这一步按照分歧的歌词处置的逻辑也纷歧样,但歌词可分为两类,一类是逐行,一类是逐字,对于逐行来说就直接绘制就行了,只是颜色,大小纷歧样罢了;逐字下一节讲解;然后从当前行歌词位置像前绘制歌词,直到超出View顶部为止,在从当前行歌词标的目的下歌词绘制,直到超出View底部为止;当前你可以利用LinearLayout添加所有歌词当前容器内,然后滚动。

歌词滚动

  1. 1

    Android中分歧的实现方式滚动体例也纷歧样,若是是直接绘制,那么滚动其实就是绘制分歧行歌词,给人的感受就是滚动了;若是是将所有歌词添加到容器中,那么就可以利用容器默认的滚动;对于我们这里的实现滚动其实就是更改lineNumber值,例如;当前lineNumber为5,暗示当前播放的是第5行歌词,经由过程用户滚动的距离就能计较出当前滚动距离是哪一行,因为我们知道每一行高度所以可以计较出当前位置,滚动到的位置,然后利用属性动画滚动:

  2. 2

    到这里LRC歌词View焦点功能根基就实现完当作了,若是要深切进修可以查看我们的【[Android开辟项目实战我的云音乐](http://a.ixuea.com/o)】课程,或者在线电子书【[电子书](http://a.ixuea.com/K)】;同时大师也可以存眷我们的微信公家号【ixuea666】和Android开辟交流QQ群:702321063。

  • 发表于 2018-10-17 00:00
  • 阅读 ( 265 )
  • 分类:其他类型

相关问题

0 条评论

请先 登录 后评论