Android--自定義View隨筆-ProgressBar實現(xiàn)

????????還記得當年MD風格剛出現(xiàn)的時候,還真是掀起了一股熱潮;個人平時比較喜歡研究一些View相關的東西,這里呢就一時興起來了解一下最普通的MD風格圓形的ProgressBar。如圖(gif不太清晰):


????????以下就以個人的理解來分析一下,自己應該怎么做呢!


????????首先,根據(jù)這個效果首選的是使用動畫來實現(xiàn)(這是句廢話??)。

? ? ? ? 其次,再來拆解一下這個過程,具體應該怎么實現(xiàn)。

? ? ? ? 最后,繪制出來。


? ? ? ? 了解動畫的同學們,應該都知道在動畫使用里面有個很神奇的東西?Interpolator,它能改變動畫的屬性值,從而實現(xiàn)理想的動畫效果。

? ??????從整個過程進行分析,此過程拆解為2個同時執(zhí)行的動畫;一個使用LinearInterpolator(動畫1),一個使用AccelerateDecelerateInterpolator(動畫2);動畫1用于改變當前進度的起始值(即當前進度的起始角度),動畫2用于改變當前進度值(即修改圖中紅色線的長度,實際修改的是當前紅色線所對應的角度值)。這兩個動畫都是循環(huán)執(zhí)行的,單次動畫時間一致。

? ? ? ? 動畫1,使用ValueAnimator進行如下設計(不需要在意動畫的Value):

修改起始值

過程1:進度值由0--->Max,isReverseTo0為false;

過程2:進度值Max--->0,isReverseTo0為true;

????????progressStart默認值為0,isReverseTo0默認值為false;progressStart的值由0開始逐漸增加,增加步長為2,這個步長越大旋轉(zhuǎn)一圈則越快,只需要確保值的合法性即可;當動畫重復時且isReverseTo0為true,這個時候需要修改當前進度的起始值為當前進度的末尾值,以便于動畫連貫(此時進度值在不斷減小,在繪制時也需要作出調(diào)整,后邊會提到)。在onAnimationUpdate時進行更新繪制。

? ? ? ? 動畫2,主要是修改進度值,進行不斷賦值即可;

更新進度值

? ? ? ? 繪制當前進度,即繪制一段圓弧,如下:

進度繪制

過程2時,需要對起始值做一下處理;


以上就是比較重要的一些,一些細節(jié)的地方不太好描述,只能好好理解一下了????;當然了,還有其他的做法,歡迎指出呀!?。≌埓笊褓n教!?。?/p>

敲代碼,就是這樣;多敲多練,一點點積累,一步步提升!

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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容