Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Jetpack Mvvm Best Practice | 8,194 | 9 days ago | 5 | Java | ||||||
难得一见 Jetpack MVVM 最佳实践!在 "以简驭繁" 代码中,对 "视图控制器" 乃至 "标准化开发模式" 形成正确、深入理解! | ||||||||||
Timber | 6,793 | 2 months ago | 213 | Java | ||||||
Material Design Music Player | ||||||||||
Listenermusicplayer | 2,269 | 6 years ago | 18 | Java | ||||||
A Grace Material Design Music Player | ||||||||||
Ponymusic | 1,878 | 3 months ago | 8 | Java | ||||||
Android online music player use okhttp&gson&material design | ||||||||||
Flutter Music Player | 1,385 | 10 months ago | 28 | apache-2.0 | Dart | |||||
Flutter Music Player - First Open Source Flutter based material design music player with audio plugin to play local music files. | ||||||||||
Grey | 390 | 3 years ago | 9 | mit | Dart | |||||
A material designed music player developed in Flutter | ||||||||||
Ylight Music | 211 | a year ago | 4 | JavaScript | ||||||
Awesome React PWA music streaming app built with Material UI using Youtube API's. Search, Play, Like & Download | ||||||||||
Music Player | 190 | 2 years ago | 54 | gpl-3.0 | Java | |||||
Lightweight and Material designed Music Player | ||||||||||
Moemusic | 140 | 6 years ago | 2 | Java | ||||||
一款基于萌否网站api的音乐管理软件 | ||||||||||
Awesome Pyqt Cn | 79 | 9 months ago | 1 | |||||||
PyQt/PySide 中文开发者必备资料合集 |
毕业设计做的项目,答辩完了,就共享出来。
波尼音乐是一款开源Android在线音乐播放器。
v 1.3.0
v 1.2.3
v 1.2.0
v 1.1.0
v 1.0.0
黑胶唱片专辑封面绘制流程
@Override
protected void onDraw(Canvas canvas) {
// 1.绘制顶部虚线
mTopLine.setBounds(0, 0, getWidth(), 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);
}
}
掘金:https://juejin.im/user/2313028193754168
微博:https://weibo.com/wangchenyan1993
Copyright 2016 wangchenyan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.