波尼音乐

系列文章

  • Android开源在线音乐播放器——波尼音乐
  • Android开源音乐播放器之播放器基本功能
  • Android开源音乐播放器之高仿云音乐黑胶唱片
  • Android开源音乐播放器之自动滚动歌词
  • Android开源音乐播放器之在线音乐列表自动加载更多

前言

毕业设计做的项目,答辩完了,就共享出来。

  • 项目地址:https://github.com/wangchenyan/ponymusic
  • 有问题请提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:https://fir.im/ponymusic

TODO

  • 在线音乐可以免下载加入我的音乐列表
  • 在线音乐自动缓存
  • 编辑音乐信息

项目

公开API

  • 在线音乐:百度音乐
  • 天气数据:高德地图

开源技术

  • okhttp-utils
  • Glide

关键代码

黑胶唱片专辑封面绘制流程

@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);}
}

截图

     

Android在线音乐播放器相关推荐

  1. Android 在线音乐播放器

    在线音乐播放器的重点是找到一个好的音乐搜索接口,下面是采用百度音乐搜索的接口,不过是非官方的,百度好像没有提供专门的音乐搜索API. 音乐搜索的两种方式 通过歌曲名和歌手精确搜索 访问:http:// ...

  2. android在线音乐播放器教程,android实现简单音乐播放器

    本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下 话不多说先上效果 前言 写这个音乐播放器实在是迫不得已.因为我们Andoird课程要求写一个音乐播放器.所以就有了此项 ...

  3. Andriod小项目——在线音乐播放器

    Andriod小项目--在线音乐播放器 转载请注明:http://blog.csdn.net/sunkes/article/details/51189189 Android在线音乐播放器 从大一开始就 ...

  4. 最全的Android开源音乐播放器源码汇总

    收集了很多音乐播放器类的Android项目源码,非常不错的开源项目,会让你事半功倍,希望大家补充...谢谢! Android基于经纬度切歌的冲绳音乐播放器源码 http://neast.cn/foru ...

  5. android 带记忆功能的播放器源码,【全开源可二开】带后台管理面板的在线音乐播放器Android应用APP源码...

    这是一款带后台管理面板的在线音乐播放器Android应用APP源码,可让您更快地构建在线和离线android音频播放器,代码全开源适合二次开发.该源码自带2个紫色和橙色主题(允许您添加更多主题),多语 ...

  6. 三款Android平台音乐播放器多方位对比

    音乐播放器作为重要的娱乐工具,在PC端异常重要,在移动端同样如此.移动端的音乐播放器很多,巨头们纷纷在这个领域布局,腾讯百度等均拥有各自的移动端音乐播放器.爱好音乐的机友们也面临较多的选择. 小编在这 ...

  7. android 音乐播放器 获取sd卡所有音乐文件,Android Studio音乐播放器无法读取SD卡,只有内部存储器...

    我很抱歉,如果这原来是一个愚蠢的问题,它可能会成为一个快速修复,但我只是无法弄清楚.我在android studio中创建了音乐播放器,并且没有任何sdcard上的歌曲不会显示在列表视图中,只有内部内 ...

  8. python播放在线音乐_Python实现在线音乐播放器

    最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口, ...

  9. python播放网络音乐_python使用Tkinter实现在线音乐播放器

    本文实例使用Tkinter实现在线音乐播放器的具体代码,供大家参考,具体内容如下 1.先使用Tkinter库写界面 2.写点击按钮触发的事件 (1).使用网易音乐的api,返回数据包装成json格式数 ...

最新文章

  1. java jar 版本号_java – 获取JAR文件版本号
  2. 代码生成工具Database2Sharp功能功能完善及更新
  3. mysql 分时统计_mysql中数据统计的技巧备忘录
  4. original_keras_version = f.attrs[‘keras_version‘].decode(‘utf8‘)
  5. IOS基础之绘图函数的使用
  6. 数据链路层差错检验循环冗余码过程图示
  7. 安装docker-machine
  8. 关于sizeof的一些东西
  9. laravel重定向自定义显示提示消息
  10. (44)FPGA面试题CMOS和TTL电路区别
  11. python绘制时间轴_MatPlotLib动态时间轴
  12. 用css3做一个求婚小动画
  13. 目标检测-爬虫-利用百度识图的方法来批量的爬取图片生产数据集
  14. 计算机视觉领域的一些牛人博客,超有实力的研究机构web主页(转)
  15. 2.2 法力池的创建和视觉特效———自制卡牌游戏之旅
  16. FPGA:逻辑函数的卡诺图化简法
  17. Pdf+Word+Visio+MATLAB输出的3维图像不清晰
  18. 淘宝产品ID在哪儿查询?
  19. cboard企业版源码_CBoard自助BI数据分析产品 v0.4.2
  20. 深睿医疗肺部疾病智能解决方案:针对新冠肺炎辅助诊断的专门研发 | 百万人学AI评选

热门文章

  1. C++简介 / 低级语言 / 高级语言
  2. 图像配准系列之“Sift特征点+薄板样条变换+FFD变换”配准方法
  3. SQLMAP tamper编写(bypass 安全狗)
  4. ae制作小球轨迹运动_AE制作一个小球的弹跳运动
  5. java 获取秒数_Java获取精确到秒的时间戳(转)
  6. vscode上传项目到github
  7. 7 Python中的函数
  8. [NOI2005]寿司晚宴
  9. 2018的初冬,派卧底去阿里、京东、美团、滴滴带回来的面试题及答案
  10. Java十万字笔记(带索引)