最近的項目很多地方需要現(xiàn)實一些數(shù)據(jù)占比,需求是水平顯示各個數(shù)據(jù)的占比和對應的數(shù)據(jù),需求圖大概是這樣:

可以看到當百分比文字顯示不下的時候,不顯示百分比文字,view的左右4個角是圓弧的形狀,當只有2個顏色的時候,后面的顏色不顯示百分比,百分比文字保留2位小數(shù)。那這個該怎么做呢,先是想到用progressBar做,但是progressBar只能顯示2段顏色,用多個progressbar就可以了,但是我們有很多段顏色怎么辦呢,接下來

首先,我們要確定需要傳入的參數(shù)有哪些,有顏色、占比數(shù)據(jù),我們定義2個方法來接收傳入的數(shù)據(jù):
顏色的數(shù)組

計算出每個數(shù)據(jù)的總和maxValue

然后常規(guī)操作,創(chuàng)建一個類集成View,new 幾個畫筆,開始干

然后就是要開始繪制了:
我們要獲取到布局的總寬度,后面要計算每一段顏色所占的比例
float viewWidth = this.getWidth();//獲取view的寬度
計算得到每一段所占的百分比
percent = barList.get(i).getMoney() / maxValue;

第一段和最后一段的部分角是圓角,所以要用mPath.addRoundRect(RectF rect, float[] radii, Direction dir)方法,float[] radii,將哪幾個地方是圓角寫進去,在for循環(huán)中,當是第一段和最后一段時,設置對應的角為5dp的弧度

上onDraw的代碼:



這時,就能繪制出需求圖中的樣子了,

沒有動畫效果怎么行呢,我們給他加一個動畫,gif圖效果不太好,可以自己試試

添加動畫,通過mAnimatorPercent來控制,將onDraw中的
percentViewPaintRect.right = lastRight? + percentWidth;改為:
percentViewPaintRect.right = lastRight + percentWidth*mAnimatorPercent;

寫到這里就完了,如果有什么想法可以私信我,最后
