好久沒寫博客了,也好久沒看自定義控件了,前些日子有需求,所以就寫了個小demo,其實博客應該早點寫的,因爲這個錄屏和轉換gif耽誤事了。好了,先看看效果:
其實就是2個空心圓外加一個弧度畫的半圓,就可實現此效果,實現步驟:
1.畫外部大圓
2.畫弧度
3.畫裏邊圓
4.繪製文字
5.動畫(其實就是每隔多長時間重新繪製一次)
好了直接上代碼
獲取半徑和圓心座標,判斷下是寬高,以最短的爲依據
繪製的方法
畫各個部位的代碼,沒啥好講的吧
畫弧度,注意設置的漸變色
最後動畫的處理
就是不斷的重繪製就寫完成了,很簡單
注意這句話啊,
mPaint.setStrokeCap(Paint.Cap.ROUND);//設置中斷處爲圓形
可以根據需求設置設置下
升級
既然完事了,那看看我們的需求,要比這個複雜一點點,上圖
多繪製了,兩條線,外加動畫
畫線注意角度的算法,數學忘了的,得自行腦補一下
角度是由3點鐘方向開始的
topAngle = (float) (Math.PI*2/360*330);
畫弧度也是由3點鐘方向開始的
canvas.drawArc(oval, 90, currentvalue, false, mPaint);//false : 不畫扇形弧邊,只畫弧長
最後動畫的實現,還是不斷的重繪製
當左邊畫完,右邊纔開始一點點的畫
我把兩個類發上去就可以直接用就行
添加控件到xml佈局,在activity中直接調用:avaterProgressCycle.setProgress(230);
AvaterProgressCycleSave1 是隻繪製圓的
AvaterProgressCycle 是升過級的