最近自己定义了一个带阴影的网络加载框,感觉效果还是蛮好的,分享给大家参考
先给效果图看看是否你想要的,不是可直接break
1、首先定义一个LoadingAlertDialog其继承于AlertDialog
public class LoadingAlertDialog extends AlertDialog {
private Context mContext;
private ProgressBar mBar;
private TextView mMessage;
public LoadingAlertDialog(Context context) {
super(context, R.style.LoadDialog);
mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_loading_layout);
//点击imageview外侧区域,动画不会消失
setCanceledOnTouchOutside(false);
mBar = (ProgressBar) findViewById(R.id.bar);
mMessage = (TextView) findViewById(R.id.message);
}
public void show(String msg) {
super.show();
if (mMessage != null) {
mMessage.setText(msg);
}
}
//设置进度图片
public void setIndeterminateDrawable(int drawable) {
mBar.setIndeterminateDrawable(mContext.getResources().getDrawable(drawable));
}
//设置字体颜色
public void setTextColor(int color) {
mMessage.setTextColor(color);
}
}
2、对应的布局文件dialog_loading_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dip"
android:layout_height="120dip"
android:background="@drawable/loading_corner"
android:gravity="center"
android:padding="10dp"
android:orientation="vertical">
<ProgressBar
android:id="@+id/bar"
android:layout_width="50dip"
android:layout_height="50dip"
android:indeterminateDuration="700" />
<!--android:indeterminateDrawable="@drawable/loading_progress_rotate"-->
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textColor="#FFFFFF" />
</LinearLayout>
3、styles.xml 中LoadDialog的样式
<style name="LoadDialog" parent="android:style/Theme.Dialog">
<!--背景颜色及和透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否去除标题 -->
<item name="android:windowNoTitle">true</item>
<!--是否去除边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">false</item>
</style>
4、弹出框的背景是一个圆形+透明黑的drawable文件 :drawable/loading_corner
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#88000000" />
<corners android:radius="10dp"/>
</shape>
</item>
</selector>
5、弹出框的加载进度条的图片也是可以通过drawable文件进行设置:loading_progress_rotate.xml(如果采用ProgressBar默认的这步就不用了)
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/default_ptr_rotate"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
6、进度条图片是:default_ptr_rotate.png
这里的进度条只是一个列子,不调用LoadingAlertDialog-->setIndeterminateDrawable()这个方法的话是默认progressBar的进度条
上面的步骤都完成了之后,下面就可以给出用例咯,很简单的
LoadingAlertDialog dialog = new LoadingAlertDialog(MainActivity.this);
dialog.show("加载中...");
//dialog.setIndeterminateDrawable(R.drawable.loading_progress_rotate);
//dialog.dismiss();