可以把安卓天天动听hd安卓音乐可视化效果做一下

后使用快捷导航没有帐号?
平板/笔记本
【亲测】你还在用天天动听吗 安卓顶级Music播放器+12套皮肤
&炉火纯青&
来自:浏览器
最新回复 4&天前
本帖最后由 深度沉淀 于
10:58 编辑
【高级播放器简介】& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && & & && &&&PlayerPro(超强音乐播放器)是一款功能非常强大的音乐播放器,其效果和功能不亚于PowerAMP播放器。支持多种均衡器设置(多种音效可供选择,需安装DSP包,附件已经包含DSP包) & && &&&天天动听界面确实是最好看的,但音效却不是这样,天天动听一直致力于界面的美化,音效却推后了!自从用了这款播放器后就迷上了,以后听歌默认音乐播放器就是它了:PlayerPro !献给喜爱音乐的朋友们!
【软件功能】 & && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
-支持专辑、艺术家、流派、备份列表和文件夹显示播放歌曲功能
-支持网格视图和列表视图显示
-支持皮肤和外观设置
-支持锁定屏幕小部件设置
-支持音量键控制上一首/下一首
-支持滑动手势播放上一首/下一首
-支持耳机相关设置
-支持睡眠计时设置功能(可提前计划听歌,到设置后自动停止播放)
-支持浏览窗口设置
-支持专辑封面下载/显示功能
- 支持音频设置功能(无需再安装DSP 音效包即可使用音效功能,但安装了音效包之后会更棒的,见下图)
- 支持音乐选择功能: 可通过 Android 音乐库选择歌曲。
- 支持点击浏览歌曲和文件夹功能: 歌曲浏览或文件夹浏览中时刻执行点击的相关操作。
- 支持在文件夹浏览时以歌曲名代替文件夹名称功能。
- 支持储入队列选项功能
- 支持歌词(歌词搜索功能请在WIFI环境下进行,不支持动态歌词)
- 更多功能请安装使用体验
【安装激活DSP音效包方法】& && && && && && && && && && && && && && && && && && && &&&
安装Music Playerpro 和 PlayerPro Dsp 以后,进入设置-音效-Dsp包激活
【软件下载】& && & 4.1M & && && && && && && && && && && && && && && && && && && && &
游客,如果您要查看本帖隐藏内容请
【附加12套皮肤】 &&4.59M & && && && && && && && && && && && && && && && && && && && &
游客,如果您要查看本帖隐藏内容请
【软件截图】& && && && && && && && && && && && && && && && && && && && && && && && &
(15.8 KB, 下载次数: 3)
10:11 上传
安装DSP包前
(203.01 KB, 下载次数: 11)
10:11 上传
(645.14 KB, 下载次数: 5)
10:11 上传
(318.63 KB, 下载次数: 14)
10:11 上传
(253.3 KB, 下载次数: 36)
10:11 上传
安装DSP包后
width:100%">
&炉火纯青&
来自:浏览器
请问大师,RB播放器怎么弄?下的是自己机型分辨率的apk还是芝麻粒小的字!&
width:100%">
&炉火纯青&
来自:浏览器
板凳有人抢吗
width:100%">
&略有小成&
来自:浏览器
width:100%">
&独步江湖&
来自:浏览器
来一个试试
width:100%">
&登堂入室&
来自:浏览器
我看看斤斤计较经济
width:100%">
&渐入佳境&
来自:浏览器
width:100%">
&略有小成&
来自:浏览器
谢谢分享,试试怎样!!
width:100%">
&炉火纯青&
来自:浏览器
& && && && && &
width:100%">
&渐入佳境&
来自:浏览器
给力啊…………
width:100%">
1 / 137 页
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
【北京宽沟】【谧静之美】【秋叶静美】【星海广场】【一组随拍】【行摄泉州】
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
联系我们:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利安卓软件里有什么音乐播放器是可以像天天动听一样放到桌面上的?_百度知道(window.slotbydup=window.slotbydup || []).push({
id: '2013896',
container: s,
size: '960,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2013898',
container: s,
size: '960,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2013900',
container: s,
size: '960,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2013902',
container: s,
size: '960,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2013904',
container: s,
size: '960,90',
display: 'inlay-fix'
当前位置:&>&&>& >仿android最新版天天动听音乐播放器应用源码V1.0
仿android最新版天天动听音乐播放器应用源码V1.0
软件大小:762.94 KB
源码类型:
源码语言:简体中文
软件等级:
官方网站:
源码演示:
运行环境:/android/ipad
更新时间:
&&温馨提示:本资源由整理提供下载转载时请留下链接说明:这个是仿android最新版天天动听音乐播放器应用源码,可能该应用比较简单吧,当然没有我们现实中的天天动听的那么完美了,该应用也是模仿了最新版的天天动听的音乐播放器的应用的,应用的所以素材等资源都来自该应用的,所以界面设计也必然很类似的,最近无聊没事干打算仿天天动听的功能,后期会就会把别的功能都补上等,不过该应用的界面布局还是可以值得学习,特别是界面的布局等,如果大家想更了解的话,可以下载该案例的安装包安装试用一下吧,安装测试包在压缩包中。
详细说明:/thread-.html
技术支持:如果遇到技术上的问题可以到我们相关网站进行咨询和解决,,,,,,。
点数不足:& &|& &下载总数:0
(window.slotbydup=window.slotbydup || []).push({
id: '2013932',
container: s,
size: '960,90',
display: 'inlay-fix'
Copyright &
Corporation662p开源网版权所有
客户端下载:&&
客服热线:9:00-18:00Android仿天天动听歌曲自动滚动view
投稿:lijiao
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了Android仿天天动听歌曲自动滚动view的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
最近项目中要做一个类似天天动听歌曲自动滚动行数的效果。首先自己想了下Android要滚动的那就是scroller类或者scrollto、scrollby结合了,或者view.layout()方法,或者使用动画。但是要循环滚动,貌似这些到最后一行滚动到第一行都有往回滚的效果,都不是很好的解决方法。怎么会忘记了可以绘制事件万物的的canvas呢。好吧,既然找到了,那就用这个方案吧!但是天天动听歌曲还有一个手动滑动的效果,貌似这篇文章没写。既然这样,那就自己来写下吧!实现之前还是先看下天天动听的效果:
想法1:获取滑动的距离,然后计算滑动了多少行,然后更新数据。实现起来貌似效果不咋地。
想法2:我们可以看的出来他滚动是一行一行的滚动的,只是根据滚动的快慢来决定滚动行数的快慢。既然这样的话,只要滚动了,就一定时间的去一行行的滚动,然后根据滚动的速度来决定更新的间隔时间。
嗯,想好了怎么实现,现在就来写代码吧。
先来写一个类,继承TextView
VerticalScrollTextView.class
public class VerticalScrollTextView extends TextView implements Runnable{
//绘制歌词画笔
private Paint mContentP
//绘制基线画笔
private Paint mLineP
//绘制滑动进度背景画笔
private Paint mRectP
//歌词数据
private List&Sentence& mDataL
private int index = 0 ;
//当前view的宽
private float mX;
//当前view的高
private float mY;
//当前view垂直方向中线
private float middleY;
//行与行之间的间距
private final static int DY = 80 ;
//歌词文字大小
private int mTextSize = 35;
//歌词中间字体的大小
private int mBigTextSize = 45;
//当前是否按下
private boolean isTouch =
//上一次触摸view的y轴坐标
private float mLastY;
//是否正在滑动
private boolean isM
//记录上一次滑动的时间
private long lastMoveT
//滑动速度追踪类
private VelocityTracker mVelocityT
//滑动最大速度
private int mMaximumV
//歌词是否为空
private boolean isE
public VerticalScrollTextView(Context context) {
this(context,null);
public VerticalScrollTextView(Context context, AttributeSet attrs) {
this(context, attrs,0);
public VerticalScrollTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//获取最大的滑动速度值
mMaximumVelocity = ViewConfiguration.get(context)
.getScaledMaximumFlingVelocity();
private void init(){
setFocusable(true);
setClickable(true);
//歌词为空设置默认值
if(mDataList==null){
mDataList = new ArrayList&&();
Sentence sentence = new Sentence(0,"没有获取到歌词",0);
mDataList.add(sentence);
//初始化歌词画笔
mContentPaint = new Paint();
mContentPaint.setTextSize(mTextSize);
mContentPaint.setAntiAlias(true);
mContentPaint.setColor(Color.parseColor("#e5e2e2"));
//设置为serif字体
mContentPaint.setTypeface(Typeface.SERIF);
//设置字体为居中
mContentPaint.setTextAlign(Paint.Align.CENTER);
//初始化基线画笔
mLinePaint = new Paint();
mLinePaint.setAntiAlias(true);
mLinePaint.setStrokeWidth(1);
mLinePaint.setColor(Color.WHITE);
//进度背景颜色画笔
mRectPaint = new Paint();
mLinePaint.setAntiAlias(true);
mRectPaint.setColor(Color.parseColor("#"));
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//如果当前进度为-1,直接返回,不用绘制
if (index == -1)
Sentence sentence = mDataList.get(index);
//绘制中间行的歌词,设置为高亮白色,大字体
mContentPaint.setColor(Color.WHITE);
mContentPaint.setTextSize(mBigTextSize);
canvas.drawText(sentence.getName(), mX/2, middleY, mContentPaint);
//当前为歌词不为空并且按下的情况下,绘制基线和进度
if(!isEmpty&&isTouch){
//获取中间行字体最高的位置
float baseLine = middleY-Math.abs(mContentPaint.ascent());
//绘制进度背景
canvas.drawRect(10.0f,baseLine-70,150.0f,baseLine,mRectPaint);
//绘制基线
canvas.drawLine(10.0f,baseLine,mX-10,baseLine,mLinePaint);
//设置进度字体大小
mContentPaint.setTextSize(mTextSize);
//绘制进度字体
canvas.drawText(String.valueOf(index),85,baseLine-35,mContentPaint);
//初始化isEmpty
//初始化歌词内容画笔
mContentPaint.setColor(Color.parseColor("#e5e2e2"));
mContentPaint.setTextSize(mTextSize);
//暂时保存中间线位置,来绘制中间线以上的行数字体
float tempY = middleY;
//绘制中间线以上的歌词
for (int i = index - 1; i &= 0; i--) {
tempY = tempY - DY;
if (tempY & 0) {
Sentence preSentence = mDataList.get(i);
canvas.drawText(preSentence.getName(), mX/2, tempY, mContentPaint);
tempY = middleY;
//绘制中间线以下的歌词
for (int i = index + 1; i & mDataList.size(); i++) {
tempY = tempY + DY;
if (tempY & mY) {
Sentence nexeSentence = mDataList.get(i);
canvas.drawText(nexeSentence.getName(), mX/2, tempY, mContentPaint);
//初始化isMoving,到这里表示滑动结束
isMoving =
protected void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
//获取view的宽和高
middleY = h * 0.5f;
public long updateIndex(int index) {
if (index == -1)
return -1;
this.index=
public List&Sentence& getDataList() {
return mDataL
public void setDataList(List&Sentence& mDataList){
this.mDataList = mDataL
public void updateUI(){
new Thread(this).start();
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
mLastY = event.getY();
case MotionEvent.ACTION_MOVE:
//创建速度追踪器
initVelocityTrackerIfNotExists();
mVelocityTracker.addMovement(event);
puteCurrentVelocity(1000, mMaximumVelocity);
//获取当前速度。默认为100
float velocity = mVelocityTracker.getYVelocity()==0?100:mVelocityTracker.getYVelocity();
long currentTime = System.currentTimeMillis();
//设置一个固定值和速度结合决定滑动更新的快慢
if(!isMoving&&currentTime-lastMoveTime&20000/Math.abs(velocity)){
isMoving =
lastMoveTime = System.currentTimeMillis();
float currentY = event.getY();
float mMoveY = currentY - mLastY;
//向上滑动-1向下滑动+1
int newIndex = mMoveY&0?index - 1:index+1;
//循环滚动
newIndex=newIndex&0?mDataList.size()-1:newIndex&=mDataList.size()?0:newI
updateIndex(newIndex);
invalidate();
mLastY = currentY;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
return super.onTouchEvent(event);
public void run() {
//自动滚动刷新的时间间隔
long time = 1000;
//控制进度
while (true) {
//当前不在按下的情况下自动滚动
if(!isTouch){
//设置当前的进度值
long sleeptime = updateIndex(i);
//使用handle刷新ui
mHandler.post(mUpdateResults);
if (sleeptime == -1)
Thread.sleep(time);
//当到了最后一行的时候自动跳转到第一行
if(i==getDataList().size())
} catch (InterruptedException e) {
e.printStackTrace();
Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() {
public void run() {
invalidate();
//创建速度追踪器
private void initVelocityTrackerIfNotExists() {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
private void recycleVelocityTracker() {
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker =
自定义view基本就是这样了,我们可以把要定义的一些属性写在attrs里面了,这里就懒得写了。大概的思路就是先绘制指定的index行的歌词,然后绘制index上面行的歌词,然后绘制index下面行的歌词。然后新建一个线程,让它通过handle隔一定的时间定时刷新歌词行数。然后在onTouchEvent处理触摸滚动行数,获取到当前滚动速度来决定一个更新的时间间隔。从而实现触摸滚动刷新的快慢。基本上就是这样了。其他的看注释。
再看下初始化数据测试的Activity:
VerticalScrollTextActivity.class
public class VerticalScrollTextActivity extends Activity {
VerticalScrollTextView mSampleV
String[] str = {"你在南方的艳阳里 大雪纷飞",
"我在北方的寒夜里 四季如春",
"如果天黑之前来的及",
"我要忘了你的眼睛",
"穷极一生 做不完一场梦",
"他不在和谁谈论相逢的孤岛",
"因为心里早已荒无人烟",
"他的心里在装不下一个家",
"做一个只对自己说谎的哑巴",
"他说你任何为人称道的美丽",
"不及他第一次遇见你",
"时光苟延残喘 无可奈何",
"如果所有土地连在一起",
"走上一生只为拥抱你",
"喝醉了他的梦 晚安",
"你在南方的艳阳里 大雪纷飞",
"我在北方的寒夜里 四季如春",
"如果天黑之前来的及",
"我要忘了你的眼睛",
"穷极一生 做不完一场梦",
"他不在和谁谈论相逢的孤岛",
"因为心里早已荒无人烟",
"他的心里在装不下一个家",
"做一个只对自己说谎的哑巴",
"他说你任何为人称道的美丽",
"不及他第一次遇见你",
"时光苟延残喘 无可奈何",
"如果所有土地连在一起",
"走上一生只为拥抱你",
"喝醉了他的梦 晚安"
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSampleView = (VerticalScrollTextView) findViewById(R.id.sampleView1);
List lst=new ArrayList&&();
for(int i=0;i&str.i++){
Sentence sen=new Sentence(i,str[i],i+1202034);
lst.add(i, sen);
mSampleView.setDataList(lst);
mSampleView.updateUI();
模拟了一首歌词数据,然后setDataList,在调用updateUI()就行了。
最后看下布局文件
activity_main.xml
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&com.goach.lib.VerticalScrollTextView
android:id="@+id/sampleView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
&/RelativeLayout&
测试下,我们就可以看到效果了:
源码下载:
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 天天动听 可视化效果 的文章

 

随机推荐