Android 开源在线音乐播放器

 更新时间:2016年09月20日 09:30:56   投稿:lqh  
这篇文章主要介绍了Android 开源在线音乐播放器的相关资料,需要的朋友可以参考下

封面图: 

简介

  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 开源在线音乐播放器的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

相关文章

  • listview Button始终放在底部示例

    listview Button始终放在底部示例

    android实现底部布局往往使用RelativeLayout的布局方式,以下的例子就是实现三层布局的底部布局的功能,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • Android控件SeekBar仿淘宝滑动验证效果

    Android控件SeekBar仿淘宝滑动验证效果

    这篇文章主要为大家详细介绍了Android控件SeekBar仿淘宝滑动验证效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 提升Android应用视觉吸引效果的10个UI设计技巧

    提升Android应用视觉吸引效果的10个UI设计技巧

    在Android应用开发中,风格和设计或许不是最关键的要素,但它们在决定Android应用成功与否上确实扮演重要的角色,以下是10个Android应用的UI设计技巧,还有个附加技巧,感兴趣的朋友可以了解下哦
    2013-01-01
  • Android仿IOS自定义AlertDialog提示框

    Android仿IOS自定义AlertDialog提示框

    本篇文章主要介绍了Android仿IOS自定义AlertDialog对话框,主要介绍了圆角AlertDialog对话框,具有一定的参考价值,有兴趣的可以了解一下。
    2017-03-03
  • Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解

    这篇文章主要介绍了Android 录制手机屏幕视频生成GIF图片实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android如何实现NFC读取卡片信息

    Android如何实现NFC读取卡片信息

    这篇文章主要介绍了Android如何实现NFC读取卡片信息问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Flutter Set存储自定义对象时保证唯一的方法详解

    Flutter Set存储自定义对象时保证唯一的方法详解

    在Flutter中,Set和List是两种不同的集合类型,List中存储的元素可以重复,Set中存储的元素不可重复,如果想在Set中存储自定义对象,需要确保对象的唯一性,那么如何保证唯一,接下来小编就给大家详细的介绍一下
    2023-11-11
  • Android 深入探究自定义view之事件的分发机制与处理详解

    Android 深入探究自定义view之事件的分发机制与处理详解

    对于安卓程序员来说,自定义view简直不要太重要,毕竟有很多功能,譬如圆形头像这些,用单纯的原生非常难以实现,而用自定义view,简直分分钟
    2021-11-11
  • Android开发使用Handler实现图片轮播功能示例

    Android开发使用Handler实现图片轮播功能示例

    这篇文章主要介绍了Android开发使用Handler实现图片轮播功能,涉及Android基于Handler操作图片的相关实现技巧与操作注意事项,需要的朋友可以参考下
    2017-09-09
  • Android Studio查看Android 5.x源码的步骤详解

    Android Studio查看Android 5.x源码的步骤详解

    Google为Android开发者带来Android Studio,用来取代Eclipse。从Android Studio出现起,整机开发和Android源码阅读和编辑一定能用上它。这篇文章小编就带大家学习下如何使用Android Studio查看Android 5.x源码,有需要的可以参考借鉴。
    2016-09-09

最新评论