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

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

需要这些哦
Android Studio
结果图1相信大师都懂一张图胜过千言万语 。

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

文章插图

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

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

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

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

文章插图

2可以看到内容是用换行符朋分的, 若是这些数据是经由过程接口返回, 而不是直接返回一个LRC文件, 那么这里面的换行符应该变为\n换行符, 这一点我们也在课程中讲解到了 。
每一行是一句歌词;每一行歌词又分为两部门, 中括号里面是当前这行歌词的起头时候, 格局为分:秒:毫秒, 有些歌词可能没有毫秒, 只有秒;歌词开首因为部门数据称为LRC元数据, 他是用来描述这个歌词的, 部门字段诠释如下:

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

文章插图

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

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

歌词解析1分歧的说话语法纷歧样, 我们这里先说思绪, 我们的实现是Java说话 。
读取该文件每一行, 然后用]拆分, 第二部门就是歌词, 第一部门继续用:拆分, 然后将三部门转为毫秒;最后将这些信息保留到对象上 。
当然为了今后更好的扩展, 因为歌词格局良多, 可以进行一些架构:

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

文章插图

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

推荐阅读