安卓基础简单快捷的加载中对话框
Posted nicojerry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓基础简单快捷的加载中对话框相关的知识,希望对你有一定的参考价值。
遇到的需求
- 项目中有些界面需要显示加载中,例如登陆界面、注册界面等等。一开始考虑找个第三方库,但是第三方库往往为了达到普遍的适用性,封装得非常复杂。有时候一个库就差不多1mb大小,这样接入成本太大了,况且一个项目还需要其他第三方库接入,如果每一个功能都用第三方库解决,势必导致开发出来的应用体积臃肿,而且难以管理结构。
- 而我只是需要简单展示一个加载中提示,所以自己实现一个会更加合理,而且更加小巧灵活。
方案的选择
在安卓开发中,系统提供了对话框类用于开发。所以我直接选择使用Support V7的AlertDialog作为实现方案。
- AlertDialog继承自AppCompatDialog,使用方法与Dialog无差别,他在低版本安卓上也能显示谷歌最新的设计规范。
- 通常使用AlertDialog都是通过Builder进行构造,Builder可以设置对话框的相关属性(标题、内容、监听器等等)。
实现分析
因为只是需要简单展示加载中的图标,图标有动画不停地旋转,当对话框显示地时候,全屏附带半透明灰色的背景。这些需求总结出来实现的思路如下:
- AlertDialog创建完之后,通过getWindow().setBackgroundDrawable()将默认的白色背景色去掉。
- dialog.getWindow().setDimAmount(0.8f),设置对话框后一层的暗淡程度,默认可以不设置。
- builder.setView(view),设置自定义内容,自定义的View从布局加载,有一个居中的ImageView。
- 对话框显示的时候,使用动画将ImageView不停旋转,达到加载中的显示效果。
- 设计两个API接口以供使用对话框:showLoading(Context)、releaseLoading(Context)
public class LoadingHelper {
private static HashMap<Context, AlertDialog> mDialog = new HashMap<>();
public static void showLoading(Context context) {
AlertDialog dialog = mDialog.get(context);
if (dialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(false);
// 从布局加载View
View root = LayoutInflater.from(context).inflate(R.layout.libs_loading_layout, null, false);
builder.setView(root);
// 启动动画不停旋转ImageView
ImageView loadIcon = root.findViewById(R.id.uiLoadIcon);
RotateAnimation animation = new RotateAnimation(0, -360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setRepeatCount(9999);
animation.setDuration(3000);
animation.setInterpolator(new LinearInterpolator());
loadIcon.startAnimation(animation);
mDialog.put(context, dialog = builder.create());
// 背景设置
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow().setDimAmount(0.1f);
}
dialog.show();
}
public static void releaseLoading(Context context) {
AlertDialog dialog = mDialog.get(context);
if (dialog != null) {
dialog.dismiss();
mDialog.remove(context);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null">
<ImageView
android:id="@+id/uiLoadIcon"
android:layout_width="55dp"
android:layout_height="55dp"
android:src="@mipmap/lib_ic_loading"
android:tint="#b2b2b2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
知识点总结
- AlertDialog对话框的使用(设置背景、控制暗淡程度、自定义内容)
- RotateAnimation动画的使用(绕中心旋转、动画插值器)
以上是关于安卓基础简单快捷的加载中对话框的主要内容,如果未能解决你的问题,请参考以下文章