Loading(二)--ThreeBodyLoadingView
生活随笔
收集整理的這篇文章主要介紹了
Loading(二)--ThreeBodyLoadingView
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這是第二個
這里展示了兩個不同大小的View效果,當(dāng)然真正的三體幾乎是沒有規(guī)律的思路
1、根據(jù)View的寬高計算三個小球的初始位置
我這里是根據(jù)寬高比重計算小球的位置,先確定中間位置,為了增加容錯性,三個小球的直徑最大為View寬度的5/6,并且最大為Vieww高度的4/5;左右小球的圓心距離中間小球的圓心是一個小球的直徑大小。 使用drawCircle繪制出來,效果是這樣
2、使用屬性動畫計算小球的位置和半徑變化大小
我使用屬性動畫,改變一個rate的成員變量,使他從0到3勻速變化大小,0~1,1~2,2~3,分別對應(yīng)小球運(yùn)動的三個狀態(tài):左->中,中->右,右->左。
rate數(shù)值0~1
| 球1 | 左->中 |
| 球2 | 中->右 |
| 球3 | 右->左 |
rate數(shù)值1~2
| 球1 | 中->右 |
| 球2 | 右->左 |
| 球3 | 左->中 |
rate數(shù)值2~3
| 球1 | 右->左 |
| 球2 | 中->右 |
| 球3 | 中->右 |
3、確定繪制順序
因為先繪制的圖層會在下面,所以右->左這個運(yùn)動位置的小球一定是最先繪制的
if (rate <= 1.0f) {drawOrders[0] = 2;drawOrders[1] = 1;drawOrders[2] = 0;} else if (rate > 1.0f && rate <= 2.0f) {drawOrders[0] = 1;drawOrders[1] = 0;drawOrders[2] = 2;} else if (rate > 2.0f && rate <= 3.0f) {drawOrders[0] = 0;drawOrders[1] = 1;drawOrders[2] = 2;} 復(fù)制代碼4、動畫開啟和結(jié)束
@Overrideprotected void onAttachedToWindow() {super.onAttachedToWindow();animStart();}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();animStop();} 復(fù)制代碼使用
xml
<com.riverlet.loading.ThreeBodyLoadingViewandroid:layout_width="100dp"android:layout_height="100dp"android:layout_marginTop="50dp"app:firstColor="#FFFF0000"app:secondColor="#FF1C86EE"app:thirdColor="#FFEE9A00" /> 復(fù)制代碼- app:firstColor,球1顏色
- app:secondColor,球2顏色
- app:thirdColor,球3顏色
#代碼 其他具體看代碼吧:Loading
-----------------------------目錄-----------------------------
- 1、CircleLoadingView
- 2、ThreeBodyLoadingView
總結(jié)
以上是生活随笔為你收集整理的Loading(二)--ThreeBodyLoadingView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: meta标签设置
- 下一篇: 一段代码看出JS的的解析到执行的顺序规则