????????還記得當(dāng)年MD風(fēng)格剛出現(xiàn)的時(shí)候悦昵,還真是掀起了一股熱潮;個(gè)人平時(shí)比較喜歡研究一些View相關(guān)的東西晌畅,這里呢就一時(shí)興起來(lái)了解一下最普通的MD風(fēng)格圓形的ProgressBar但指。如圖(gif不太清晰):
????????以下就以個(gè)人的理解來(lái)分析一下,自己應(yīng)該怎么做呢!
????????首先棋凳,根據(jù)這個(gè)效果首選的是使用動(dòng)畫來(lái)實(shí)現(xiàn)(這是句廢話??)拦坠。
? ? ? ? 其次,再來(lái)拆解一下這個(gè)過(guò)程剩岳,具體應(yīng)該怎么實(shí)現(xiàn)贞滨。
? ? ? ? 最后,繪制出來(lái)拍棕。
? ? ? ? 了解動(dòng)畫的同學(xué)們晓铆,應(yīng)該都知道在動(dòng)畫使用里面有個(gè)很神奇的東西?Interpolator,它能改變動(dòng)畫的屬性值绰播,從而實(shí)現(xiàn)理想的動(dòng)畫效果骄噪。
? ??????從整個(gè)過(guò)程進(jìn)行分析,此過(guò)程拆解為2個(gè)同時(shí)執(zhí)行的動(dòng)畫蠢箩;一個(gè)使用LinearInterpolator(動(dòng)畫1)链蕊,一個(gè)使用AccelerateDecelerateInterpolator(動(dòng)畫2);動(dòng)畫1用于改變當(dāng)前進(jìn)度的起始值(即當(dāng)前進(jìn)度的起始角度)忙芒,動(dòng)畫2用于改變當(dāng)前進(jìn)度值(即修改圖中紅色線的長(zhǎng)度示弓,實(shí)際修改的是當(dāng)前紅色線所對(duì)應(yīng)的角度值)。這兩個(gè)動(dòng)畫都是循環(huán)執(zhí)行的呵萨,單次動(dòng)畫時(shí)間一致奏属。
? ? ? ? 動(dòng)畫1,使用ValueAnimator進(jìn)行如下設(shè)計(jì)(不需要在意動(dòng)畫的Value):
過(guò)程1:進(jìn)度值由0--->Max潮峦,isReverseTo0為false囱皿;
過(guò)程2:進(jìn)度值Max--->0,isReverseTo0為true忱嘹;
????????progressStart默認(rèn)值為0嘱腥,isReverseTo0默認(rèn)值為false;progressStart的值由0開始逐漸增加拘悦,增加步長(zhǎng)為2齿兔,這個(gè)步長(zhǎng)越大旋轉(zhuǎn)一圈則越快,只需要確保值的合法性即可础米;當(dāng)動(dòng)畫重復(fù)時(shí)且isReverseTo0為true分苇,這個(gè)時(shí)候需要修改當(dāng)前進(jìn)度的起始值為當(dāng)前進(jìn)度的末尾值,以便于動(dòng)畫連貫(此時(shí)進(jìn)度值在不斷減小屁桑,在繪制時(shí)也需要作出調(diào)整医寿,后邊會(huì)提到)。在onAnimationUpdate時(shí)進(jìn)行更新繪制蘑斧。
? ? ? ? 動(dòng)畫2靖秩,主要是修改進(jìn)度值须眷,進(jìn)行不斷賦值即可;
? ? ? ? 繪制當(dāng)前進(jìn)度沟突,即繪制一段圓弧花颗,如下:
過(guò)程2時(shí),需要對(duì)起始值做一下處理事扭;
以上就是比較重要的一些捎稚,一些細(xì)節(jié)的地方不太好描述乐横,只能好好理解一下了????求橄;當(dāng)然了,還有其他的做法葡公,歡迎指出呀9夼!催什!請(qǐng)大神賜教:鳌!蒲凶!
敲代碼气筋,就是這樣;多敲多練旋圆,一點(diǎn)點(diǎn)積累宠默,一步步提升!