預覽圖
原理
整個效果分成兩部分。一部分為弧度動畫,一部分為點點動畫
弧度動畫就是畫弧線,動畫改變弧度就可以了
點點動畫比較復雜??偣卜譃閮刹剑?.計算非弧線的地方可以容納的點點個數(shù),然后畫出來;2.根據(jù)弧度的改變確定點點的寬度
最后讓整個旋轉(zhuǎn)起來 OK
使用
自定義的屬性
c_progressColor : 進度條的顏色
c_strokeWidth : 進度條的寬度
c_autoRunning :自動開始旋轉(zhuǎn)
c_atOnceEnd :true調(diào)用reset后立刻結(jié)束動畫,false會等到動畫執(zhí)行完后結(jié)束
1.作為進度加載使用
<com.cyy.progress.loading.LoadingProgress
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="16dp"
app:c_progressColor="@color/colorAccent"
app:c_strokeWidth="5dp" />
2.配合頭像使用
layout文件
<FrameLayout
android:id="@+id/headerLayout"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="16dp"
android:background="#00ff00">
<com.cyy.progress.loading.LoadingProgress xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/loadingProgress"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:c_atOnceEnd="true"
app:c_autoRunning="false"
app:c_progressColor="@color/colorPrimaryDark"
app:c_strokeWidth="3dp" />
<view
class="de.hdodenhof.circleimageview.CircleImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="6dp"
android:src="@mipmap/header" />
</FrameLayout>
activity中代碼中這是點擊時點用start(), 這里模擬網(wǎng)絡加載7s后調(diào)用reset
headerLayout.setOnClickListener {
loadingProgress.start()
headerLayout.postDelayed({
loadingProgress.reset()
} , 7000)
}
3.事件回調(diào)
fun onProgressStartListener(progress: LoadingProgress) //開始旋轉(zhuǎn)
fun onProgressRepeatListener(progress: LoadingProgress) //每個周期結(jié)束的時候調(diào)用
fun onProgressResetListener(progress: LoadingProgress) //重置的回調(diào)事件
fun onProgressEndListener(progress: LoadingProgress ) //動畫結(jié)束回調(diào)