之前在群上見有小白問怎麼實現這個效果(不帶動畫),於是就自己動手寫了一個自定義View並實現了進度“動畫”效果。
為啥“動畫”帶引號,因為在自定義View中沒有使用到動畫,而達到動畫的效果是因為更新檢視實現的。
此篇文章需要有自定義View的基礎推薦個地址:github.com/GcsSloop/An…
下面開始此View的思路程式碼講解
Paint mPaint1 = new Paint();//整體背景色
Paint mPaint2 = new Paint();//進度條黃色
Paint mPaint3 = new Paint();//設定字型顏色
Paint mPaint4 = new Paint();//透明色複製程式碼
首先自定義了四個畫筆
寫了三個賦值方法
在自定義View上加文字讓其豎著居中,會有文字底部位於居中線上的情況,導致文字並沒有居中。上面程式碼通過畫筆Paint算出居中位置。
算出View在螢幕中的百分比長度,要拿 寬/100*Double = 長度。由於Double計算不精確需要判斷在100%的情況下需要View寬度充滿螢幕。
mPaint4繪製透明進度條(全長),先繪製一條透明的View這個View的長是最後確定的View長。
mPaint2繪製的進度條是動畫的進度條,在未確定View長時繪製的長
這是重點!!!
下圖的程式碼作用是:當兩個值相等時讓之前繪製好的透明View mPaint4和mPaint2交換顏色,原因是由於RecyclerView的Adapter快取和View 的postInvalidate()方法有莫名其妙的衝突會導致View長度錯亂,目前仍沒找到徹底解決的方法,有興趣的朋友可以下Demo把View換成ProportionView2和ProportionView3找一下問題。
這是一個簡單的自定義View,此篇文章結束,最後附上Demo地址:
github.com/NathansLiu/…