Android 自定義View UC下拉重新整理效果(一)

joe發表於2016-11-06

啦啦啦,今天給大家帶來最近弄的CircleProgress相關的效果。這裡的效果圖可能還看不出是UC瀏覽器的那個下拉重新整理的效果,不過首先還是要說說這個進度條,在下一篇中將實現真正的下拉重新整理!

話不多說,直接上圖:

Android 自定義View UC下拉重新整理效果(一)

progress_靜態.png

Android 自定義View UC下拉重新整理效果(一)

progress_動態.gif

特點:就是一個進度條

1、可以設定多種顏色。
2、可以顯示多種狀態(LOADING、SUCCESS、ERROR,其實遠不止這幾種)
3、可以控制是否顯示箭頭

相關準備工作

知識點:

1.Canvas裡面相關方法
2.drawArc()畫圓弧的方法
3.drawPath()畫路徑的方法
4.屬性動畫使用

結果的鉤鉤或者那個叉叉還有那個箭頭都是使用drawPath()來完成的。

在onDraw裡面對應有四個相關的方法:

1.drawArc(Canvas canvas):畫對應的進度
2.drawTriangle(Canvas c, float startAngle, float sweepAngle):畫箭頭
3.drawHook(Canvas canvas):畫鉤鉤
4.drawError(Canvas canvas):畫叉叉

三個動畫控制:

兩個來控制進度條的 startAnglesweepAngle,一個用來控制畫鉤鉤或者畫叉叉的時候的漸變效果!

相關程式碼

三支畫筆

三個動畫

四個draw相關方法

上面的程式碼就是相關核心的方法了,其實對應的進度條效果就是控制 startAnglesweepAngle這兩個對應的欄位,然後不斷的呼叫drawArc()方法。

對於畫鉤鉤或者畫叉叉,就是一個ValueAnimator,通過百分比控制縮放和畫筆的透明度。

對於drawTriangle()方法,如果你覺得很眼熟的話也很正常,其實這個就是在SwipeRefreshLayout裡面抄過來的。。。。。
一開始,我很糾結這個箭頭怎麼才能跟著進度條一起旋轉,自己寫的也是有各種問題,另外mArrowScale這個引數在裡面其實沒有使用的。
如果沒有offset偏移量,那麼那個path肯定是畫在左上角的。

通過這個一設定,這個path其實就到了右邊的中間靠著圓弧的內側一點去了(因為這裡的半徑減去了圓弧自己的寬度。。),這麼一來,再根據相關的角度旋轉角度,就有一種跟著進度條一直轉的效果了!

對於drawArc()方法,主要是控制startAnglesweepAngle這兩個變數,mCurrentGlobalAngle的變化範圍是(0~360),而mCurrentSweepAngle的變化範圍是(0~360f – MIN_SWEEP_ANGLE * 2),為什麼要減去兩個最小值呢?因為sweepAngle總會加一個或者總會減去一個最小值,所以最小間距還是MIN_SWEEP_ANGLE
至於什麼時候加什麼時候減呢?這裡有一個變數值mModeAppearing提供記錄!那就是當mObjectAnimatorSweep的動畫重複的時候,就需要切換一下了。。

最終效果圖

Android 自定義View UC下拉重新整理效果(一)

pull_refresh2.gif

下一篇Android 自定義View UC下拉重新整理效果(二)
介紹剩餘的下拉重新整理部分,還有就是兩個圓圈的過度效果。。

相關的程式碼請移步 我的github。。。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

Android 自定義View UC下拉重新整理效果(一) Android 自定義View UC下拉重新整理效果(一)

相關文章