Android 開(kāi)源在線音樂(lè)播放器
封面圖:
簡(jiǎn)介
- 波尼音樂(lè)是一款開(kāi)源Android在線音樂(lè)播放器。
- 播放本地音樂(lè)與在線音樂(lè)
- 在線音樂(lè)排行榜,如熱歌榜、新歌榜等
- 高仿云音樂(lè)的黑膠唱片專(zhuān)輯封面
- 歌詞顯示,自動(dòng)搜索歌詞
- 夜間模式
- 定時(shí)關(guān)閉
更新說(shuō)明
v 1.0
First Release
TODO
在線音樂(lè)可以免下載加入我的音樂(lè)列表
在線音樂(lè)自動(dòng)緩存
編輯音樂(lè)信息
項(xiàng)目公開(kāi)API
在線音樂(lè):百度音樂(lè)
天氣數(shù)據(jù):高德地圖
開(kāi)源技術(shù)
okhttp-utils
Android-Universal-Image-Loader
關(guān)鍵代碼
黑膠唱片專(zhuān)輯封面繪制流程
@Override protected void onDraw(Canvas canvas) { // 1.繪制頂部虛線 mTopLine.setBounds(0, getTop(), getWidth(), getTop() + mTopLineHeight); mTopLine.draw(canvas); // 2.繪制黑膠唱片外側(cè)半透明邊框 mCoverBorder.setBounds(mDiscPoint.x - mCoverBorderWidth, mDiscPoint.y - mCoverBorderWidth, mDiscPoint.x + mDiscBitmap.getWidth() + mCoverBorderWidth, mDiscPoint.y + mDiscBitmap.getHeight() + mCoverBorderWidth); mCoverBorder.draw(canvas); // 3.繪制黑膠 // 設(shè)置旋轉(zhuǎn)中心和旋轉(zhuǎn)角度,setRotate和preTranslate順序很重要 mDiscMatrix.setRotate(mDiscRotation, mDiscCenterPoint.x, mDiscCenterPoint.y); // 設(shè)置圖片起始坐標(biāo) mDiscMatrix.preTranslate(mDiscPoint.x, mDiscPoint.y); canvas.drawBitmap(mDiscBitmap, mDiscMatrix, null); // 4.繪制封面 mCoverMatrix.setRotate(mDiscRotation, mCoverCenterPoint.x, mCoverCenterPoint.y); mCoverMatrix.preTranslate(mCoverPoint.x, mCoverPoint.y); canvas.drawBitmap(mCoverBitmap, mCoverMatrix, null); // 5.繪制指針 mNeedleMatrix.setRotate(mNeedleRotation, mNeedleCenterPoint.x, mNeedleCenterPoint.y); mNeedleMatrix.preTranslate(mNeedlePoint.x, mNeedlePoint.y); canvas.drawBitmap(mNeedleBitmap, mNeedleMatrix, null); }
歌詞繪制流程
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 中心Y坐標(biāo) float centerY = getHeight() / 2 + mTextSize / 2 + mAnimOffset; // 無(wú)歌詞文件 if (!hasLrc()) { float centerX = (getWidth() - mCurrentPaint.measureText(label)) / 2; canvas.drawText(label, centerX, centerY, mCurrentPaint); return; } // 畫(huà)當(dāng)前行 String currStr = mLrcTexts.get(mCurrentLine); float currX = (getWidth() - mCurrentPaint.measureText(currStr)) / 2; canvas.drawText(currStr, currX, centerY, mCurrentPaint); // 畫(huà)當(dāng)前行上面的 for (int i = mCurrentLine - 1; i >= 0; i--) { String upStr = mLrcTexts.get(i); float upX = (getWidth() - mNormalPaint.measureText(upStr)) / 2; float upY = centerY - (mTextSize + mDividerHeight) * (mCurrentLine - i); // 超出屏幕停止繪制 if (upY - mTextSize < 0) { break; } canvas.drawText(upStr, upX, upY, mNormalPaint); } // 畫(huà)當(dāng)前行下面的 for (int i = mCurrentLine + 1; i < mLrcTimes.size(); i++) { String downStr = mLrcTexts.get(i); float downX = (getWidth() - mNormalPaint.measureText(downStr)) / 2; float downY = centerY + (mTextSize + mDividerHeight) * (i - mCurrentLine); // 超出屏幕停止繪制 if (downY > getHeight()) { break; } canvas.drawText(downStr, downX, downY, mNormalPaint); } }
以上就是Android 開(kāi)源在線音樂(lè)播放器的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!
- Android音樂(lè)播放器制作 點(diǎn)擊歌曲實(shí)現(xiàn)播放(二)
- Android音樂(lè)播放器制作 掃描本地音樂(lè)顯示在手機(jī)(一)
- Android簡(jiǎn)易音樂(lè)播放器實(shí)現(xiàn)代碼
- Android仿音樂(lè)播放器功能
- 詳解Android應(yīng)用開(kāi)發(fā)--MP3音樂(lè)播放器代碼實(shí)現(xiàn)(一)
- Android MediaPlayer實(shí)現(xiàn)音樂(lè)播放器實(shí)例代碼
- Android 音樂(lè)播放器的開(kāi)發(fā)實(shí)例詳解
- Android基于Service的音樂(lè)播放器
- Android繪制音樂(lè)播放器示波器
- Android音樂(lè)播放器制作 加入控制臺(tái)(三)
相關(guān)文章
Android如何通過(guò)手機(jī)獲取驗(yàn)證碼來(lái)完成注冊(cè)功能
注冊(cè)app或者網(wǎng)絡(luò)帳號(hào)的時(shí)候,經(jīng)常需要手機(jī)獲取驗(yàn)證碼,來(lái)完成注冊(cè)功能,那么android如何通過(guò)手機(jī)獲取驗(yàn)證碼來(lái)完成注冊(cè)功能,代碼是怎么實(shí)現(xiàn)的呢?下面看看小編給大家?guī)Я说囊欢未a分析吧2015-11-11Android沉浸式狀態(tài)欄實(shí)現(xiàn)
這篇文章主要介紹了Android沉浸式狀態(tài)欄實(shí)現(xiàn),即一體化狀態(tài)欄實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-01-01Android編程使用光線傳感器獲取光線強(qiáng)弱的方法【LightSensorManager封裝類(lèi)】
這篇文章主要介紹了Android編程使用光線傳感器獲取光線強(qiáng)弱的方法,結(jié)合實(shí)例形式分析了Android光線傳感器管理封裝類(lèi)LightSensorManager的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11Flutter之自定義Dialog實(shí)現(xiàn)版本更新彈窗功能的實(shí)現(xiàn)
這篇文章主要介紹了Flutter之自定義Dialog實(shí)現(xiàn)版本更新彈窗功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Flutter沉浸式狀態(tài)欄/AppBar導(dǎo)航欄/仿咸魚(yú)底部凸起導(dǎo)航欄效果
這篇文章主要介紹了Flutter沉浸式狀態(tài)欄/AppBar導(dǎo)航欄/仿咸魚(yú)底部凸起導(dǎo)航欄效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04android app在后臺(tái)運(yùn)行彈出彈窗
這篇文章主要為大家介紹了android app在后臺(tái)運(yùn)行彈出彈窗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Android?RecyclerBarChart繪制使用教程
這篇文章主要為大家介紹了Android?RecyclerBarChart繪制使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12