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%時,每個條目上要顯示的顏色值,(后面再講如何自定義替換顏色顯示和條目數(shù)),可以發(fā)現(xiàn),顏色的總體是從藍色漸變成粉色,下面是2種模式下,進度到30%左右和70%左右的圖:


20190709143914589.png
20190709143927551.png

上面的是默認顏色模式,下面的是,固定變色模式,可以發(fā)現(xiàn),在顏色模式一下,不管你進度調到多少,你選中的進度的顏色,會從所有顏色中,按照當前百分比的形式,有整體漸變效果。就是說,在顏色模式一下,你都能夠看到所有顏色的漸變渲染效果。而在顏色二模式下,每個條目能改變的顏色已經(jīng)是決定好了的,例如最中間的條目,它只有2種顏色選擇,選取時的“6d56e3”顏色值和未選取時的白色,無漸變效果。

好,接下來再來介紹其他的屬性。

進度條未選中部分的顏色:

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

進度條每個條目的圓角弧度:

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

默認是5弧度,數(shù)值越大,越圓滑,對了,在api21以下的android版本,無法顯示圓弧,只能顯示矩形。


20190712084847643.png

條目之間的距離:

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

就是每跟條目之間的距離,默認是每個條目的2倍,可以設置小數(shù)值。

20190712092838705.png

可以看到,每個條目中間的空格的距離,是每個條目寬度的2倍,如果這個值越大,中間的距離就按照倍數(shù)增加。

顯示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。

接下來到了大家最關心的問題點,如何改變選中的色彩和每個條目的高度和數(shù)目。這個目前只能在代碼中設置。

20190709141751914-3.png

這邊先看這張圖,其實進度條在拖滿的時候,每個顏色的值都已經(jīng)是決定好的了,比如第一個顏色是“0050dc”,第二個是“0650dc”,最后一個顏色是“ee5deb”,然后總共有29個條目。

接下來,我們再看目前有幾種高度的條目,是有7種高度的條目,我將第一個條目的高度設置為1倍數(shù),那第二個條目是第一個的3倍,第三個條目是5倍數(shù),第四個是4倍數(shù),最后一個條目是1倍數(shù)。這樣,就可以得出2個數(shù)組。

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);

就可以了,這邊要注意,高度數(shù)組和顏色數(shù)組的個數(shù)要相同。

然后,在poseType = 3的情況下,這個高度數(shù)組的表達意思又有點不同了,在poseType = 3時,每個條目的高度都是相同的,所以這個高度的數(shù)組,就表達為每個條目,距離頂部的倍數(shù)值。所以上面的高度數(shù)組,在poseType = 3的情況下,顯示的效果是:

20190712092838705-2.png

可以看出,這張圖的每個條目,距離頂部有7種距離,我將控件的高度減去條目的高度,然后除以6,就可以得出1倍的距離,在高度數(shù)組中,如果當前值為1,那這個條目,距離頂部為0,如果當前值為2,那距離頂部高度為(2-1)倍數(shù)。所以距離頂部的高度就是(高度值-1)倍數(shù)得出來的值。

好,至此,音樂頻譜進度條的屬性介紹完了,如果大家在看了源碼之后,還有什么不了解的,可以給我留言,項目我會慢慢地更新優(yōu)化的。希望大家支持。

最后,轉載的話,請標明出處。

----------古誠欺

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容