首先是相关的资源文件
dialog_background
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp" />
<solid android:color="@color/black" />
</shape>
<color name="white">#FFFFFF</color>
<color name="black">#B3000000</color>
为了展示效果,背景加了透明度。
loading_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading"
android:fromDegrees="0.0"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:toDegrees="360.0" />
动画效果
重头戏:WaitDialog
public class WaitDialog {
private Context context;
private boolean mCancelable = false;
private Dialog dialog;
private final View mLayout;
@SuppressLint("InflateParams")
public WaitDialog(Context context) {
this.context = context;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert inflater != null;
mLayout = inflater.inflate(R.layout.wait_dialog, null);
}
//弹框点击消除
public WaitDialog setCancelable(Boolean mCancelable) {
this.mCancelable = mCancelable;
return this;
}
//标题修改
public WaitDialog setText(String text) {
TextView title = mLayout.findViewById(R.id.title);
if (text.length() == 0) {
title.setVisibility(View.GONE);
} else {
title.setVisibility(View.VISIBLE);
title.setText(text);
}
return this;
}
public Dialog builder() {
if (dialog == null) {
dialog = new Dialog(context, R.style.progress_dialog);
dialog.setCancelable(mCancelable);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.addContentView(mLayout, new ActionBar.LayoutParams(
ActionBar.LayoutParams.FILL_PARENT, ActionBar.LayoutParams.WRAP_CONTENT));
}
return dialog;
}
}
<style name="progress_dialog" 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">@null</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
wait_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/dialog_background"
android:gravity="center"
android:orientation="vertical"
android:padding="16.0dip">
<ProgressBar
android:layout_width="40.0dip"
android:layout_height="40.0dip"
android:indeterminateDrawable="@drawable/loading_anim" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="8.0dip"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColor="@color/white"
android:textSize="16.0sp"
android:textStyle="bold" />
</LinearLayout>
调用
new WaitDialog(MainActivity.this).setCancelable(true).setText("").builder().show();