大師好,我們是愛學啊,今天給大師帶來一篇關于LRC歌詞道理和在Android上若何實現歌詞逐行滾動的結果,逐字滾動下一篇文章講解。
相信大師都懂一張圖勝過千言萬語。
結果和此刻市道上年夜部門播放器差不多,當然若是要運用到貿易項目中,必定還需要進行一些優化,例如:滾動結果有彈性,字體巨細,字體顏色等。
LRC是英文Lyric(歌詞)的縮寫,常用作逐行歌詞擴展名。他是純文本文件,格局簡單,能實現歌詞逐行滾動;當然今朝業界年夜部門播放器都是在他的根本上心猿意馬制了,但根基道理一樣,當學完我們這篇文章后,大師也可以按照本身的需求心猿意馬制。
在實現歌詞功能前,必定需要搞大白LRC歌詞格局,例如:我們找了一段LRC歌詞:
可以看到內容是用換行符朋分的,若是這些數據是經由過程接口返回,而不是直接返回一個LRC文件,那么這里面的換行符應該變為\n換行符,這一點我們也在課程中講解到了。
每一行是一句歌詞;每一行歌詞又分為兩部門,中括號里面是當前這行歌詞的起頭時候,格局為分:秒:毫秒,有些歌詞可能沒有毫秒,只有秒;歌詞開首因為部門數據稱為LRC元數據,他是用來描述這個歌詞的,部門字段詮釋如下:
前面這些字段按照分歧的播放器可能用的位置紛歧樣,我們課程中固然解析了這些字段,但也沒有效到。
將每行歌詞前面的時候解析后,轉為毫秒,如許播放器在播放的時辰可以獲取到播放時候,然后拿著時候查找當前時候對應哪一行歌詞,然后在界面上高亮這一行歌詞,或者做更多的處置,例如:字體增年夜等操作;就實現了歌詞逐行高亮;至于滾動分歧的平臺紛歧樣,滾動思緒是:獲取到當前時候所對應哪一行,然后我們必定能算出每一行歌詞高度,所以行*每一行高度就是滾動的高度。
分歧的說話語法紛歧樣,我們這里先說思緒,我們的實現是Java說話。
讀取該文件每一行,然后用]拆分,第二部門就是歌詞,第一部門繼續用:拆分,然后將三部門轉為毫秒;最后將這些信息保留到對象上。
當然為了今后更好的擴展,因為歌詞格局良多,可以進行一些架構:
分歧的平臺也紛歧樣,我們這里是Android,所以繪制用Canvas。我們這里的思緒是:歌詞View的高度是固心猿意馬的,因為我們但愿當前行歌詞始終顯示到歌詞View中心,所以先算出View的中間高度,然后在該位置繪制當前行歌詞,這一步按照分歧的歌詞處置的邏輯也紛歧樣,但歌詞可分為兩類,一類是逐行,一類是逐字,對于逐行來說就直接繪制就行了,只是顏色,巨細紛歧樣罷了;逐字下一節講解;然后從當前行歌詞位置像前繪制歌詞,直到超出View頂部為止,在從當前行歌詞標的目的下歌詞繪制,直到超出View底部為止;當前你可以利用LinearLayout添加所有歌詞當前容器內,然后滾動。
Android中分歧的實現方式滾動體例也紛歧樣,若是是直接繪制,那么滾動其實就是繪制分歧行歌詞,給人的感受就是滾動了;若是是將所有歌詞添加到容器中,那么就可以利用容器默認的滾動;對于我們這里的實現滾動其實就是更改lineNumber值,例如;當前lineNumber為5,暗示當前播放的是第5行歌詞,經由過程用戶滾動的距離就能計較出當前滾動距離是哪一行,因為我們知道每一行高度所以可以計較出當前位置,滾動到的位置,然后利用屬性動畫滾動:
到這里LRC歌詞View焦點功能根基就實現完當作了,若是要深切進修可以查看我們的【[Android開辟項目實戰我的云音樂](http://a.ixuea.com/o)】課程,或者在線電子書【[電子書](http://a.ixuea.com/K)】;同時大師也可以存眷我們的微信公家號【ixuea666】和Android開辟交流QQ群:702321063。
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!