Android自定义View,Android炫酷的音乐频谱进度条,变化自如的音乐进度条

(因为简书的markdown编辑器无法设置图片大小,而我的文章又是从我的博客上粘贴来的,所以图片大小无法控制,如果影响的可以去我博客看)
前段时间,公司项目有个UI需求,要做一个这么的东西 :

20190708164625723.png

一个仿音乐频率谱线进度条(这是什么鬼?),那好,就先将这个控件命名为:音乐频谱进度条:)
废话不多说,先来看一下效果图:
2019071008533615.gif

附上在GitHub上的地址,点击地址,就可以获取源码了。
如何依赖?
首先在项目的build.gradle中加入:

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

然后添加依赖:

dependencies {
     implementation'com.github.CaesarShao:MusicSpectrumBar:1.1.2'
    }

接着,在布局文件中,这么使用:

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
            android:layout_width="300dp"
            android:layout_height="100dp"
            />

直接跑应用,就可以了,效果图:


20190709094909748.png

音乐频谱进度条显示的模式:

1.居中模式(默认)

效果如上图,这个是默认的显示模式,在布局文件中,加入属性:

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
            android:layout_marginTop="50dp"
            android:layout_width="300dp"
            android:layout_height="100dp"
            app:poseType="1"
            />

2.底部对齐模式(poseType = 1)

           ..
            app:poseType="1"/>
20190709130211815.png

3.顶部对齐模式(poseType = 2)

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
           ..
            app:poseType="2"/>
20190709130238683.png

4.等长条显示模式(poseType = 3)

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
           ..
            app:poseType="3"/>
20190709130254941.png

颜色渲染的模式:

1.颜色渐变模式(默认)

2.固定变色模式

使用方式:

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
      ..
        app:colorGradient="0" />
 
    <com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
      ..
        app:colorGradient="1" />

默认的colorGradient属性为0,当设置为1时,渲染模式就变成了固定变色模式。
解释下这2种颜色渲染模式:


20190709141751914.png

这张图是当进度条拉到100%时,每个条目上要显示的颜色值,(后面再讲如何自定义替换颜色显示和条目数),可以发现,颜色的总体是从蓝色渐变成粉色,下面是2种模式下,进度到30%左右和70%左右的图:


20190709143914589.png
20190709143927551.png

上面的是默认颜色模式,下面的是,固定变色模式,可以发现,在颜色模式一下,不管你进度调到多少,你选中的进度的颜色,会从所有颜色中,按照当前百分比的形式,有整体渐变效果。就是说,在颜色模式一下,你都能够看到所有颜色的渐变渲染效果。而在颜色二模式下,每个条目能改变的颜色已经是决定好了的,例如最中间的条目,它只有2种颜色选择,选取时的“6d56e3”颜色值和未选取时的白色,无渐变效果。

好,接下来再来介绍其他的属性。

进度条未选中部分的颜色:

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
       ..
        app:unSelectColor="@color/colorAccent" />

进度条每个条目的圆角弧度:

 <com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
        ..
        app:roundAngle="5"/>

默认是5弧度,数值越大,越圆滑,对了,在api21以下的android版本,无法显示圆弧,只能显示矩形。


20190712084847643.png

条目之间的距离:

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
        ..
        app:gapMultiple="2"/>

就是每跟条目之间的距离,默认是每个条目的2倍,可以设置小数值。

20190712092838705.png

可以看到,每个条目中间的空格的距离,是每个条目宽度的2倍,如果这个值越大,中间的距离就按照倍数增加。

显示3模式的条目高度:

在app:poseType = 3的模式下,再设置app:SpectMultiple这个属性。

<com.caesar.musicspectrumbarlibrary.MusicSpectrumBar
      ..
        app:poseType="3"
        app:SpectMultiple="0.5" />

这个值是设置,在3模式下,每个条目的高度占总体控件高度的百分比高度,默认取0.5,也就是一半的高度,取值范围是0~1。这个属性,必须只有在poseType为3情况下,才有用。


20190712095010799.png

这张图上面的控件是设置为0.7,下面的控件是设置为0.5。

接下来到了大家最关心的问题点,如何改变选中的色彩和每个条目的高度和数目。这个目前只能在代码中设置。

20190709141751914-3.png

这边先看这张图,其实进度条在拖满的时候,每个颜色的值都已经是决定好的了,比如第一个颜色是“0050dc”,第二个是“0650dc”,最后一个颜色是“ee5deb”,然后总共有29个条目。

接下来,我们再看目前有几种高度的条目,是有7种高度的条目,我将第一个条目的高度设置为1倍数,那第二个条目是第一个的3倍,第三个条目是5倍数,第四个是4倍数,最后一个条目是1倍数。这样,就可以得出2个数组。

private int[] highD = {1, 3, 5, 4, 6, 2, 7, 5, 6, 3, 2, 1, 2, 1, 2, 6, 5, 4, 2, 7, 5, 2, 3, 1, 2, 1, 3, 2, 1};
private String[] ColorStr = {"#0050dc", "#0650dc", "#0b51dd", "#1151dd", "#1951de", "#2052de", "#2852df", "#3153df", "#3a53e0", "#4454e0", "#4e54e1", "#5855e2", "#6255e2", "#6d56e3", "#7756e3", "#8257e4", "#8c58e5", "#9758e5", "#a159e6", "#ab59e7", "#b45ae7", "#be5ae8", "#c65be8", "#ce5be9", "#d65ce9", "#dd5cea", "#e45cea", "#e95deb", "#ee5deb"};

然后在初始化的时候,调用:

MusicSpectrumBar mb = findViewById(R.id.mb_type);
mb.setDatas(highD, ColorStr);

就可以了,这边要注意,高度数组和颜色数组的个数要相同。

然后,在poseType = 3的情况下,这个高度数组的表达意思又有点不同了,在poseType = 3时,每个条目的高度都是相同的,所以这个高度的数组,就表达为每个条目,距离顶部的倍数值。所以上面的高度数组,在poseType = 3的情况下,显示的效果是:

20190712092838705-2.png

可以看出,这张图的每个条目,距离顶部有7种距离,我将控件的高度减去条目的高度,然后除以6,就可以得出1倍的距离,在高度数组中,如果当前值为1,那这个条目,距离顶部为0,如果当前值为2,那距离顶部高度为(2-1)倍数。所以距离顶部的高度就是(高度值-1)倍数得出来的值。

好,至此,音乐频谱进度条的属性介绍完了,如果大家在看了源码之后,还有什么不了解的,可以给我留言,项目我会慢慢地更新优化的。希望大家支持。

最后,转载的话,请标明出处。

----------古诚欺

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容