Android 开源在线音乐播放器

所属分类: 软件编程 / Android 阅读数: 33
收藏 0 赞 0 分享

封面图: 

简介

  1. 波尼音乐是一款开源Android在线音乐播放器。
  2. 播放本地音乐与在线音乐
  3. 在线音乐排行榜,如热歌榜、新歌榜等
  4. 高仿云音乐的黑胶唱片专辑封面
  5. 歌词显示,自动搜索歌词
  6. 夜间模式
  7. 定时关闭

更新说明
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设计登录界面、找回密码、注册功能

这篇文章主要为大家详细介绍了Android设计登录界面的方法,Android实现找回密码、注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android通过手势实现答题器翻页效果

这篇文章主要为大家详细介绍了Android通过手势实现答题器翻页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android采用双缓冲技术实现画板

这篇文章主要为大家详细介绍了Android采用双缓冲技术实现画板的相关资料,思路清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发之毛玻璃效果实例代码

这篇文章主要给大家分享android开发之毛玻璃效果的实例代码,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Android实现桌面悬浮窗、蒙板效果实例代码

这篇文章主要介绍了Android实现桌面悬浮窗、蒙板效果实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解读Android的Volley库的功能结构

这篇文章主要介绍了Android的Volley开发框架的功能结构,Volley是Android开发中网络部分的一大利器,包含很多HTTP协议通信的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中使用Volley库发送HTTP请求的实例教程

这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程,包括创建Volley单例的基本知识与取消Request请求的技巧等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿QQ聊天撒花特效 很真实

本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android的HTTP操作库Volley的基本使用教程

这篇文章主要介绍了Android的HTTP操作库Volley的基本使用教程,包括JSON请求与图片加载等用法的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿水波纹流量球进度条控制器

这篇文章主要介绍了Android仿水波纹流量球进度条控制器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多