github上比较酷炫的loading动画https://github.com/81813780/AVLoadingIndicatorView/blob/master/screenshots/avi.gif
,对此此简单的封装一下.
public class LoadingDialog extends Dialog {
private AVLoadingIndicatorView avi;
private TextView messagetv;
private RelativeLayout loadingbg;
/**
* 自定义主题及布局的构造方法
* @param context
* @param theme// 去除顶部蓝色线条
*/
public LoadingDialog(Context context, int theme){
super(context, theme);
/**设置对话框背景透明*/
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setContentView(R.layout.loading_layout);
loadingbg = (RelativeLayout) findViewById(R.id.loadingbg);
avi = (AVLoadingIndicatorView) findViewById(R.id.avi);
messagetv = (TextView) findViewById(R.id.message);
}
/**
* 为加载进度个对话框设置不同的提示消息
*
* @param message 给用户展示的提示信息
* @return build模式设计,可以链式调用
*/
public LoadingDialog setMessage(String message) {
messagetv.setText(message);
return this;
}
@Override
public void show() {
super.show();
avi.smoothToShow();
}
/***
* 设置loading背景色
* @param Colorbg
* @return
*/
public LoadingDialog setLoadingBg(int Colorbg){
loadingbg.setBackgroundColor(Colorbg);
return this;
}
@Override
public void dismiss() {
super.dismiss();
avi.smoothToHide();
}
布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">>
<RelativeLayout
android:id="@+id/loadingbg"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@drawable/loadingbg"
android:gravity="center"
android:orientation="vertical">
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/avi"
style="@style/AVLoadingIndicatorView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_centerHorizontal="true"
app:indicatorColor="@color/statuscolor"
app:indicatorName="LineScalePartyIndicator" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_below="@+id/avi"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:text="加载中..." />
</RelativeLayout>
</RelativeLayout>
其中关注的主要属性就是
indicatorColor 控制loading的着色
indicatorName 各种不同的样式的loading
如下就是LineScalePartyIndicator
对于不同样式的选择 如下:(可以对照上图 gif 图找到对应动画,通过indicatorName进行设置)或者java 代码中avi.setIndicator(indicatorName);进行设置
IndicatorsName 列表
Row 1
• BallPulseIndicator
• BallGridPulseIndicator
• BallClipRotateIndicator
• BallClipRotatePulseIndicator
Row 2
• SquareSpinIndicator
• BallClipRotateMultipleIndicator
• BallPulseRiseIndicator
• BallRotateIndicator
Row 3
• CubeTransitionIndicator
• BallZigZagIndicator
• BallZigZagDeflectIndicator
• BallTrianglePathIndicator
Row 4
• BallScaleIndicator
• LineScaleIndicator
• LineScalePartyIndicator
• BallScaleMultipleIndicator
Row 5
• BallPulseSyncIndicator
• BallBeatIndicator
• LineScalePulseOutIndicator
• LineScalePulseOutRapidIndicator
Row 6
• BallScaleRippleIndicator
• BallScaleRippleMultipleIndicator
• BallSpinFadeLoaderIndicator
• LineSpinFadeLoaderIndicator
Row 7
• TriangleSkewSpinIndicator
• PacmanIndicator
• BallGridBeatIndicator
• SemiCircleSpinIndicator
Row 8
• com.wang.avi.sample.MyCustomIndicator
去除顶部蓝色横条样式
<style name="MyDialogStyle">
<item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
<item name="android:windowContentOverlay">@null</item><!--内容覆盖 -->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item><!-- 窗口样式Dialog -->
<item name="android:backgroundDimEnabled">true</item><!--模糊-->
</style>