本文是wangchenyan同学的一个毕业设计作品,对于想研究音乐播放器的同学,特别是歌词自定义滚动部分。如下:支持自动滚动,超长歌词自动换行,自定义属性。

简介

波尼音乐是一款开源Android在线音乐播放器。

  • 播放本地音乐与在线音乐

  • 在线音乐排行榜,如热歌榜、新歌榜等

  • 高仿云音乐的黑胶唱片专辑封面

  • 歌词显示,自动搜索歌词

  • 夜间模式

  • 定时关闭

更新说明

  • 新增通知栏播放控制

  • 修复魅族手机扫描不到音乐的问题

  • 修复已知bug

  • 修复在线音乐无法加载的问题

  • 修复弱网时播放网络歌曲导致ANR的问题

  • 修复每日启动图片无法更新的问题

  • 下载在线歌曲可以显示专辑封面了

  • 修复已知bug

  • 支持 Android 6.0 运行时权限

  • 修复已知bug

  • First Release

公开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);}
}

截图

Github地址:点击阅读原文

一款开源Android在线音乐播放器相关推荐

  1. Android在线音乐播放器

    波尼音乐 系列文章 Android开源在线音乐播放器--波尼音乐 Android开源音乐播放器之播放器基本功能 Android开源音乐播放器之高仿云音乐黑胶唱片 Android开源音乐播放器之自动滚动 ...

  2. MKOnlineMusicPlayer 开源的在线音乐播放器

    简介 MKOnlineMusicPlayer 是一款开源的基于 Meting 的在线音乐播放器.具有音乐搜索.播放.下载.歌词同步显示.个人网易云音乐播放列表同步等功能. 前端界面参照 QQ 音乐网页 ...

  3. Android 在线音乐播放器

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

  4. 轻量级音乐播放器 android,5款顶级Android离线音乐播放器,哪款才是你的菜?

    打开左侧栏,Stellio 的功能排列井井有条.你可以选择多样的播放队列,根据专辑.演奏者等属性快速找到想要的歌曲. 重视细节的Stellio 还有睡眠模式.自定义widget 等小功能.难能可贵的是 ...

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

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

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

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

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

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

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

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

  9. 几款最主流的音乐播放器应用源码-android源码

    影音播放 优雅音乐播放器应用源码 这是一款不错的音乐播放器应用源码案例,优雅音乐播放器应用源码,该应用的界面有点类似小米音乐播放器,应用的整天布局还没有那 人气:3328运行环境:/android/i ...

  10. java在线音乐播放器课程_[Java教程]15款最好的网站音乐播放器

    [Java教程]15款最好的网站音乐播放器 0 2014-10-27 17:02:55 在互联网上有很多的脚本和插件,可以很容易将音乐播放功能集成到网站,以下是15款最好的网站音乐播放器. Flash ...

最新文章

  1. 基于Selenium2与Python自动化测试环境搭建
  2. 七、 熵编码算法(1)——基础知识
  3. 【pmcaff】苏杰:产品经理对技术做这些,就完蛋了
  4. 理解MySQL——索引与优化
  5. c盘users的用户名怎么改_iphone备份太大,严重挤占C盘空间怎么办?不用额外软件将备份放在C盘之外的教程...
  6. Java Date的after和before方法解释
  7. P5643-[PKUWC2018]随机游走【min-max容斥,dp】
  8. linux c mysql教程_Linux c访问mysql 编写入门
  9. python类的构造方法是_Python类中属性和构造方法的区别?
  10. Oracle OLAP 优化 这么玩!
  11. 题解【NOIP2013_火柴排序】— 问题与转化
  12. 将路由器当成交换机使用
  13. 织梦个人网站即时到账支付插件
  14. html页面如何引用母版页,内容页面访问母版页控件的两种方法
  15. selenium firefox 启动报错 Timed out wating 45 seconds for firefox to start
  16. 技术分享 | gh-ost 在线 ddl 变更工具​
  17. 计算机休眠是打不开,电脑自动进入睡眠模式打不开是为什么
  18. c++链表获取长度,链表翻转,查找链表倒数第K个节点以及中间点
  19. 怎么把pdf转换成高清图片
  20. 自增ID相同时报错: Database operation expected to affect 1 row(s) but actually affected 2 row(s)...

热门文章

  1. 设计模式(1)——策略模式
  2. 华为算法精英赛(题3:概率计算)
  3. 静态对象和非静态对象的区别
  4. 经典的观点挖掘算法(文本挖掘系列)
  5. idea导入本地idea的web项目(服务器用的是tomcat)
  6. 标准C程序设计七---121
  7. DLUTOJ 1033 Matrix
  8. Myeclipse6.5中安装maven
  9. [设计模式]装饰者模式
  10. Mysql:日志管理:二进制事务日志