AVLoadingIndicatorView是一个实现了各种各样加载效果的库,每一种效果都很精美。
Add dependencies in build.gradle.
dependencies { compile 'com.wang.avi:library:2.1.3' }Add the AVLoadingIndicatorView to your layout:
Simple
<com.wang.avi.AVLoadingIndicatorView android:layout_width="wrap_content" android:layout_height="wrap_content" app:indicatorName="BallPulseIndicator" />Advance
<com.wang.avi.AVLoadingIndicatorView android:id="@+id/avi" android:layout_width="wrap_content" //or your custom size android:layout_height="wrap_content" //or your custom size style="@style/AVLoadingIndicatorView"// or AVLoadingIndicatorView.Large or AVLoadingIndicatorView.Small android:visibility="visible" //visible or gone app:indicatorName="BallPulseIndicator"//Indicator Name app:indicatorColor="your color" />It's very simple use just like .
void startAnim(){ avi.show(); // or avi.smoothToShow(); } void stopAnim(){ avi.hide(); // or avi.smoothToHide(); }When using proguard need add rules:
-keep class com.wang.avi.** { *; } -keep class com.wang.avi.indicators.** { *; }Indicators is load from class names, proguard may change it (rename).
the indicators are as follows:
Row 1
BallPulseIndicatorBallGridPulseIndicatorBallClipRotateIndicatorBallClipRotatePulseIndicatorRow 2
SquareSpinIndicatorBallClipRotateMultipleIndicatorBallPulseRiseIndicatorBallRotateIndicatorRow 3
CubeTransitionIndicatorBallZigZagIndicatorBallZigZagDeflectIndicatorBallTrianglePathIndicatorRow 4
BallScaleIndicatorLineScaleIndicatorLineScalePartyIndicatorBallScaleMultipleIndicatorRow 5
BallPulseSyncIndicatorBallBeatIndicatorLineScalePulseOutIndicatorLineScalePulseOutRapidIndicatorRow 6
BallScaleRippleIndicatorBallScaleRippleMultipleIndicatorBallSpinFadeLoaderIndicatorLineSpinFadeLoaderIndicatorRow 7
TriangleSkewSpinIndicatorPacmanIndicatorBallGridBeatIndicatorSemiCircleSpinIndicatorRow 8
com.wang.avi.sample.MyCustomIndicator 项目中应用: Activity中使用 DataLoadingDialog mDataLoadingDialog = new DataLoadingDialog(this); mDataLoadingDialog.show(); mDataLoadingDialog.dismiss(); public class DataLoadingDialog extends Dialog { public DataLoadingDialog(Context context) { super(context, R.style.loadingdialog); } public DataLoadingDialog(Context context, int theme) { super(context, theme); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.data_loading); } public void setMsg(String text) { } } loadingdialog代码是以下 <style name="loadingdialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:backgroundDimAmount">0.6</item> </style> data_loading代码是以下<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.wang.avi.AVLoadingIndicatorView android:id="@+id/avloa" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" app:indicator="BallClipRotate" app:indicator_color="@color/red" /> <!--<com.wang.avi.AVLoadingIndicatorView--> <!--android:id="@+id/avloa"--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:visibility="visible"--> <!--app:indicator="BallClipRotate"--> <!--app:indicator_color="@color/red"--> <!--/>--> </LinearLayout>