初嘗自定義View和屬性動(dòng)畫:實(shí)現(xiàn)一個(gè)轉(zhuǎn)動(dòng)的進(jìn)度條

最近看到了郭霖大神寫的博客,關(guān)于屬性動(dòng)畫的使用的。Android屬性動(dòng)畫完全解析(上),初識(shí)屬性動(dòng)畫的基本用法

覺得講的真的是很有意思,通俗易懂。一口氣看完上中下三篇,腰不疼氣不喘呀哈哈。。。

剛好公司的UI設(shè)計(jì)師來(lái)跟我說現(xiàn)在新的設(shè)計(jì)中會(huì)有一個(gè)評(píng)價(jià)好評(píng)率,到時(shí)旁邊要有一個(gè)圓環(huán)來(lái)代表進(jìn)度,最好還要有動(dòng)畫效果,就那種一開始就轉(zhuǎn)動(dòng),從0轉(zhuǎn)到當(dāng)前進(jìn)度的效果。UI大概長(zhǎng)這個(gè)樣子:

其實(shí)這個(gè)的效果就很像是京東小白信用的那個(gè)動(dòng)畫效果了。


剛好看完郭霖大神對(duì)于屬性動(dòng)畫的講解,感覺這個(gè)應(yīng)該難度不是很大。于是說干就干。

首先是要先分析一下View的構(gòu)成

也就是說其實(shí)這個(gè)View可以分為三層:

1、最底下一層,是一個(gè)不會(huì)變的圓

2、一個(gè)深色的,代表進(jìn)度的扇形

3、中間的的小圓

其中1和3是不會(huì)變的,所謂的進(jìn)度其實(shí)就是2中扇形的圓心角的度數(shù)了

所以我們要分層的把View畫出來(lái)

先創(chuàng)建一個(gè)自定義的View


在自定義的View中先定義好即將要用到的變量,同時(shí)重寫一下最重要的?onDraw();

然后是先定義好xml中即將要用到的自定義View的屬性

定義在項(xiàng)目的attrs.xml文件中

然后重寫自定義View構(gòu)造函數(shù)

把xml中的屬性讀取進(jìn)來(lái),同時(shí)初始化一下即將要用的畫筆



PS:使用完 TypeArray 之后記得調(diào)用一下 TypeArray.recycle()釋放資源

好了,準(zhǔn)備工作做的差不多了,我們來(lái)先畫第一個(gè)圓

在onDraw()中調(diào)用一下,看下效果


效果


第一個(gè)圓已經(jīng)成功的畫出來(lái)了

現(xiàn)在畫代表進(jìn)度的扇形


效果


為了能看到效果,先讓扇形的角度等于270,實(shí)際上扇形的角度是要給屬性動(dòng)畫控制的,根據(jù)動(dòng)畫的時(shí)長(zhǎng)來(lái)控制

再畫一個(gè)中間的小圓


調(diào)用一下


效果

吶,現(xiàn)在是不是已經(jīng)長(zhǎng)得有點(diǎn)像射雞獅要求的了啦,可能你會(huì)說顏色不對(duì)啊,可別忘記了我們?cè)缇皖A(yù)留了自定義屬性呢


修改成射雞獅制定的顏色及圓環(huán)的寬度之后,是不是基本就是這個(gè)圓了。


但目前為止,自定義View是畫完了,接下來(lái)就是添加動(dòng)畫了

動(dòng)畫是使用新的屬性動(dòng)畫,以前的補(bǔ)間動(dòng)畫和幀動(dòng)畫已經(jīng)不能滿足我們的需要了

如果對(duì)于屬性動(dòng)畫不了解的可以看看Android屬性動(dòng)畫完全解析(上),初識(shí)屬性動(dòng)畫的基本用法,然后順便把它接下去的中、下篇也看一下,就能理解了。

最后,實(shí)現(xiàn)動(dòng)畫效果


動(dòng)畫的實(shí)現(xiàn)很簡(jiǎn)單,只是對(duì)目標(biāo)角度進(jìn)行一個(gè)平滑的過渡,然后在過渡的過程中不斷的重畫扇形

調(diào)用動(dòng)畫

效果

動(dòng)畫是不是已經(jīng)很順暢的跑起來(lái)了

可以開始整理代碼了

首先我們肯定不滿足參數(shù)只能在xml指定,特別是代表進(jìn)度的扇形的角度,這個(gè)必須是拿到真實(shí)數(shù)據(jù)之后才能計(jì)算得到的。所以,有必要把一些接口給暴露出來(lái)

考慮到View的可定制性,我暴露以下這些

這樣就可以供我們?cè)诘玫綄?shí)際數(shù)據(jù)之后對(duì)View進(jìn)行定制了


最終,在我編寫的UI界面中使用


好吧,其實(shí)我好困,把文章寫成了流水賬了。。。不過沒關(guān)系,主要只是記錄一下這一次的心得,同時(shí)也分享一下,不能總是只看不分享吧哈哈~睡覺睡覺,有空再改改好了~


如果這篇文章又幫到你的話,請(qǐng)點(diǎn)一下‘喜歡’,我會(huì)更努力的創(chuàng)作的

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,692評(píng)論 4 61
  • 古代君王多自稱寡人,意為寡德之人,作為一個(gè)謙稱,來(lái)昭告天下自己是上蒼派來(lái)的有德之人。 而朱元璋用行動(dòng)告訴你,寡人并...
    小P的P閱讀 836評(píng)論 0 9
  • 網(wǎng)易云課堂-IOS 與Android設(shè)計(jì)規(guī)范 引入:紅燈停,綠燈行 設(shè)計(jì)規(guī)范是為了培養(yǎng)/適應(yīng)用戶的使用習(xí)慣. 1....
    羅尹伊閱讀 339評(píng)論 0 2
  • 或許是兒時(shí)語(yǔ)文老師給我的回憶太過深刻,所以如今的我迷上了看書。 或許是骨子里的文人血脈得到覺醒,所以現(xiàn)在的我沉迷于...
    貳拾一_閱讀 705評(píng)論 12 20

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