二話不說(shuō)!先來(lái)看效果!

之前在群上見(jiàn)有小白問(wèn)怎么實(shí)現(xiàn)這個(gè)效果(不帶動(dòng)畫(huà)),于是就自己動(dòng)手寫(xiě)了一個(gè)自定義View并實(shí)現(xiàn)了進(jìn)度“動(dòng)畫(huà)”效果。
為啥“動(dòng)畫(huà)”帶引號(hào),因?yàn)樵谧远xView中沒(méi)有使用到動(dòng)畫(huà),而達(dá)到動(dòng)畫(huà)的效果是因?yàn)楦乱晥D實(shí)現(xiàn)的。
此篇文章需要有自定義View的基礎(chǔ)推薦個(gè)地址:https://github.com/GcsSloop/AndroidNote
下面開(kāi)始此View的思路代碼講解
Paint mPaint1 = new Paint();//整體背景色
Paint mPaint2 = new Paint();//進(jìn)度條黃色
Paint mPaint3 = new Paint();//設(shè)置字體顏色
Paint mPaint4 = new Paint();//透明色
首先自定義了四個(gè)畫(huà)筆
寫(xiě)了三個(gè)賦值方法

在自定義View上加文字讓其豎著居中,會(huì)有文字底部位于居中線上的情況,導(dǎo)致文字并沒(méi)有居中。上面代碼通過(guò)畫(huà)筆Paint算出居中位置。

算出View在屏幕中的百分比長(zhǎng)度,要拿 寬/100*Double = 長(zhǎng)度。由于Double計(jì)算不精確需要判斷在100%的情況下需要View寬度充滿屏幕。

mPaint4繪制透明進(jìn)度條(全長(zhǎng)),先繪制一條透明的View這個(gè)View的長(zhǎng)是最后確定的View長(zhǎng)。
mPaint2繪制的進(jìn)度條是動(dòng)畫(huà)的進(jìn)度條,在未確定View長(zhǎng)時(shí)繪制的長(zhǎng)

這是重點(diǎn)?。?!
下圖的代碼作用是:當(dāng)兩個(gè)值相等時(shí)讓之前繪制好的透明View mPaint4和mPaint2交換顏色,原因是由于RecyclerView的Adapter緩存和View 的postInvalidate()方法有莫名其妙的沖突會(huì)導(dǎo)致View長(zhǎng)度錯(cuò)亂,目前仍沒(méi)找到徹底解決的方法,有興趣的朋友可以下Demo把View換成ProportionView2和ProportionView3找一下問(wèn)題。

這是一個(gè)簡(jiǎn)單的自定義View,此篇文章結(jié)束,最后附上Demo地址:
https://github.com/NathansLiu/ProportionView
