編輯:關於Android編程
封面圖:

簡介
更新說明
v 1.0
First Release
TODO
在線音樂可以免下載加入我的音樂列表
在線音樂自動緩存
編輯音樂信息
項目公開API
在線音樂:百度音樂
天氣數據:高德地圖
開源技術
okhttp-utils
Android-Universal-Image-Loader
關鍵代碼
黑膠唱片專輯封面繪制流程
@Override
protected void onDraw(Canvas canvas) {
// 1.繪制頂部虛線
mTopLine.setBounds(0, getTop(), getWidth(), getTop() + mTopLineHeight);
mTopLine.draw(canvas);
// 2.繪制黑膠唱片外側半透明邊框
mCoverBorder.setBounds(mDiscPoint.x - mCoverBorderWidth, mDiscPoint.y - mCoverBorderWidth,
mDiscPoint.x + mDiscBitmap.getWidth() + mCoverBorderWidth, mDiscPoint.y +
mDiscBitmap.getHeight() + mCoverBorderWidth);
mCoverBorder.draw(canvas);
// 3.繪制黑膠
// 設置旋轉中心和旋轉角度,setRotate和preTranslate順序很重要
mDiscMatrix.setRotate(mDiscRotation, mDiscCenterPoint.x, mDiscCenterPoint.y);
// 設置圖片起始坐標
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坐標
float centerY = getHeight() / 2 + mTextSize / 2 + mAnimOffset;
// 無歌詞文件
if (!hasLrc()) {
float centerX = (getWidth() - mCurrentPaint.measureText(label)) / 2;
canvas.drawText(label, centerX, centerY, mCurrentPaint);
return;
}
// 畫當前行
String currStr = mLrcTexts.get(mCurrentLine);
float currX = (getWidth() - mCurrentPaint.measureText(currStr)) / 2;
canvas.drawText(currStr, currX, centerY, mCurrentPaint);
// 畫當前行上面的
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);
}
// 畫當前行下面的
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 開源在線音樂播放器的資料整理,後續繼續補充相關資料,謝謝大家對本站的支持!
Android 中RecyclerView使用詳解(一)
概述針對RecyclerView,谷歌有一段介紹的話:RecyclerView is a more advanced and flexible version of Li
【Android】ORM數據庫框架之GreenDao快速入門與使用
今天我們來介紹一款性能非常好的orm數據庫框架GreenDao,相信大家一定對它有所耳聞,或者已經在項目中在使用它了,雖然我在去年就開始使用這款框架,但是一直沒有做過系統
Android中的Shape和Selector的結合使用實例
一:在Android程序開發中,我們經常會去用到Shape這個東西去定義各種各樣的形狀,首先我們了解一下Shape下面有哪些標簽,都代表什麼意思:(1).solid:填充
Android普通對話框用法實例分析
本文實例講述了Android普通對話框用法。分享給大家供大家參考。具體如下:main.xml布局文件:<?xml version=1.0 encoding=