android 开源 音乐播放器,Android 开源在线音乐播放器
封面图:
简介
波尼音乐是一款开源Android在线音乐播放器。
播放本地音乐与在线音乐
在线音乐排行榜,如热歌榜、新歌榜等
高仿云音乐的黑胶唱片专辑封面
歌词显示,自动搜索歌词
夜间模式
定时关闭
更新说明
v 1.0
First Release
TODO
在线音乐可以免下载加入我的音乐列表
在线音乐自动缓存
编辑音乐信息
项目公开API
在线音乐:百度音乐
天气数据:高德地图
开源技术
关键代码
黑胶唱片专辑封面绘制流程
@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 开源在线音乐播放器相关推荐
- 网易云音乐牵手华研,在线音乐市场走向多元化竞争
3月1日,网易云音乐与台湾最大的唱片公司之一华研国际达成战略合作.一是在音乐版权合作方面,网易云音乐已获得华研国际旗下目前全量音乐曲库的授权,田馥甄.S.H.E.林宥嘉.炎亚纶等华研艺人演唱歌曲全量上 ...
- python播放网络音乐_python使用Tkinter实现在线音乐播放器
本文实例使用Tkinter实现在线音乐播放器的具体代码,供大家参考,具体内容如下 1.先使用Tkinter库写界面 2.写点击按钮触发的事件 (1).使用网易音乐的api,返回数据包装成json格式数 ...
- 腾讯音乐2019Q2财报:在线音乐付费用户达到创纪录的3100万
进入8月,美股进入财报季披露高峰.8月13日,腾讯音乐娱乐集团披露了其2019年第二季度未经审计的财务报告.财报显示,腾讯音乐Q2的各项数据保持稳步增长,总营收59亿元(8.59亿美元),同比增长31 ...
- Android在线音乐播放器
波尼音乐 系列文章 Android开源在线音乐播放器--波尼音乐 Android开源音乐播放器之播放器基本功能 Android开源音乐播放器之高仿云音乐黑胶唱片 Android开源音乐播放器之自动滚动 ...
- 音乐播放器-Android+okhttp连接+Spring boot服务器+oracle数据库+腾讯云端
1.整体架构 1.1软件系统架构: Android+okhttp连接+Spring boot服务器+oracle数据库+腾讯云端服务器地址:https://github.com/DNFDS/Twink ...
- html5做在线音乐,html5实现在线响应式音乐播放器
大概很早的时候就有想法做一个音乐播放器玩玩,以前可能还考虑过做APP,大一的时候第一个html的静态页面也是做的音乐网站,想想,大概小时候比较喜欢音乐吧.然而,现在入了前端大坑,就用h5做一个耍耍好了 ...
- 在线音乐播放器 html,html5实现在线响应式音乐播放器
大概很早的时候就有想法做一个音乐播放器玩玩,以前可能还考虑过做APP,大一的时候第一个html的静态页面也是做的音乐网站,想想,大概小时候比较喜欢音乐吧.然而,现在入了前端大坑,就用h5做一个耍耍好了 ...
- Java在线音乐播放系统的设计与实现
为了使用户可以在网络上在线欣赏音乐并且下载歌曲,方便用户对音乐资源的管理,设计并实现了该时光在线音乐播放系统.本时光在线音乐系统使用了Java web与B/S架构开发.通过实这个时光在线音乐播放系统, ...
- 区块链毕业_基于.NET Core的在线音乐系统的设计与实现
摘要 市场调研发现,移动互联网的高速发展和4G网络的全面普及,高速移动网络下提供单一功能的在线音乐服务已经无法满足用户日益增长的需求,侧重互动社交服务的音乐类平台的市场占有率.用户访问量和用户粘度等均 ...
- 10个在线音乐分享中文网站推荐
①亦歌 http://www.1g1g.com/ 提供简单.快捷.实用的音乐播放服务,以主动推送为特色的在线音乐播放器,支持各种扩展软件,帮助您在各种环境中更方便地使用. Firefox扩展 http ...
最新文章
- 牛客练习赛64 - B Dis2(树,基础图论)
- postman 接口测试工具介绍
- Gateway网关-网关的cors跨域配置
- php round half even,PHP round( )用法及代碼示例
- java中 queryparam_java – 何时使用@QueryParam和@PathParam
- exfat为什么不适合机械硬盘_为什么有人说小排量车不适合跑高速,多少排量的车适合?...
- Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑
- server sql 无法从long转为int_MySQL中,21个写SQL的好习惯(修正版)
- 郭明錤:全新设计AirPods Pro2将于2022年末推出
- Minix的系统调用
- Linux下iwconfig权限,Linux中用iwconfig配置wireless-tools
- 碧桂园博智林机器人总部大楼_碧桂园11.4亿元竞得北滘坤洲地块,近博智林机器人谷...
- 深度学习-浅层神经网络
- 具有舆论属性或社会动员能力的互联网信息服务安全评估报告指南
- Re: Object Oriented
- 数据库:一条sql语句查询每门课程都大于80分的学生姓名
- python ipad pro_离开 PC,在 iPad Pro 上也能编程了?
- C++ Primer Plus 第4章
- matlab信号系统实验报告,信号与系统 MATLAB实验报告
- 小米机型TWRP_recovery合集分享-支持米9等新机
热门文章
- IT服务管理流程控制的绩效指标 KPI
- 推荐几款好用的网站CMS管理系统
- 电脑打开热点后无法连接到网络
- linux sd卡写文件速度慢,请问硬核写sd卡速度有什么提高的好方法
- 仙剑制作人教你成为游戏人
- windows server 2019 中文语言包
- 计算机模拟做报童模型,用基于计算机随机模拟的下降法求解报童问题
- 淘宝按图搜索商品(拍立淘)、图片上传API接口、图片识别商品接口img2text标题栏、链接及图片相关参数字段API数据获取调用示例
- matlab 传函将s换为jw,已知单位负反馈系统开环传递函数为20 s(0.5s 1),
- 东风风神汽车4S店管理系统