欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 开源在线音乐播放器

程序员文章站 2024-03-06 09:31:31
封面图:  简介 波尼音乐是一款开源android在线音乐播放器。 播放本地音乐与在线音乐 在线音乐排行榜,如热歌榜、新歌榜等...

封面图: 

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