内容简介:毕业设计做的项目,答辩完了,就共享出来。波尼音乐是一款开源Android在线音乐播放器。
系列文章
- Android开源在线音乐播放器——波尼音乐
- Android开源音乐播放器之播放器基本功能
- Android开源音乐播放器之高仿云音乐黑胶唱片
- Android开源音乐播放器之自动滚动歌词
- Android开源音乐播放器之在线音乐列表自动加载更多
前言
毕业设计做的项目,答辩完了,就共享出来。
- 项目地址: github.com/wangchenyan…
- 有问题请提Issues
- 如果喜欢,欢迎Star!
简介
波尼音乐是一款开源Android在线音乐播放器。
- 播放本地音乐与在线音乐
- 在线音乐排行榜,如热歌榜、新歌榜等
- 高仿云音乐的黑胶唱片专辑封面
- 歌词显示,自动搜索歌词
- 编辑歌曲信息
- 夜间模式
- 定时关闭
更新说明
v 1.3.0
- 新增歌词支持上下拖动
- 新增支持分屏模式
- 新增本地歌曲支持按大小和时长过滤
- 新增下载的歌曲文件自动添加专辑封面
- 新增编辑歌曲信息
- 新增5.0以上系统支持联动系统媒体中心,锁屏显示播放信息
- 修复已知bug
v 1.2.3
- 新增通知栏播放控制
- 修复魅族手机扫描不到音乐的问题
- 修复已知bug
v 1.2.0
- 修复在线音乐无法加载的问题
- 修复弱网时播放网络歌曲导致ANR的问题
- 修复每日启动图片无法更新的问题
- 下载在线歌曲可以显示专辑封面了
- 修复已知bug
v 1.1.0
- 支持 Android 6.0 运行时权限
- 修复已知bug
v 1.0.0
- First Release
下载地址
fir:fir.im/ponymusic
TODO
- 在线音乐可以免下载加入我的音乐列表
- 在线音乐自动缓存
- 编辑音乐信息
项目
公开API
- 在线音乐:百度音乐
- 天气数据:高德地图
开源技术
关键代码
黑胶唱片专辑封面绘制流程
@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); } } 复制代码
截图
关于作者
简书: www.jianshu.com/users/32315…
License
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. 复制代码
迁移自我的简书 2016.06.08
以上所述就是小编给大家介绍的《Android开源在线音乐播放器——波尼音乐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 跨平台开源音乐播放器Mous Player
- 知名科技博主:开源软件面临经济困境,就像过去的音乐产业一样
- 《Moon Rider》是一款全新的开源VR音乐可视化游戏
- ICLR19论文:口哨声变交响乐,神经网络一键改变音乐风格,LeCun推荐 | 已开源
- music-dl:从网易云音乐、QQ 音乐、酷狗音乐、虾米音乐等搜索和下载歌曲(Python)
- 中央音乐学院首招音乐人工智能博士!研究 AI + 音乐,他们是认真的
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。