Android加载框

github地址:https://github.com/LinweiJ/LoadingDialog

使用

先在 project的build.gradle 添加:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

然后在module的build.gradle 添加:

dependencies {
            compile 'com.github.LinweiJ:LoadingDialog:V0.0.1'
    }

简单使用

LoadingDialog loadingDialog = new LoadingDialog(context);
//或 LoadingDialog loadingDialog = new LoadingDialog.Builder(context).create();
//显示加载框
loadingDialog.loading();
//直接取消加载框
loadingDialog.cancel();
//显示加载成功后取消加载框
loadingDialog.loadSuccess();
//显示加载失败后取消加载框
loadingDialog.loadFail();

loadingDialog.gif

自定义参数(文字 延时时间 延时消失事件)

方法一:

这里使用了建造者模式,跟原生dialog一样可以通过builder来初始化设置参数

//自定义参数方法一:通过LoadingDialog.Builder获得LoadingDialog时,定义参数
        LoadingDialog.Builder builder = new LoadingDialog.Builder(this);
        builder.setLoadingText("处理中...")
                .setFailText("处理失败")
                .setSuccessText("处理成功")
                //设置延时5000ms才消失,可以不设置默认1000ms
                .setDefaultDelayMillis(5000)
                //设置默认延时消失事件, 可以不设置默认不调用延时消失事件
                .setCancelDelayListener(new LoadingDialog.CancelDelayListener() {
                    @Override
                    public void success(LoadingDialog dialog) {
                        dialog.cancel();//加载框消失
                        Toast.makeText(mActivity, "处理成功==延时消失", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void fail(LoadingDialog dialog) {
                        dialog.cancel();//加载框消失
                        Toast.makeText(mActivity, "处理失败==延时消失", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void complete(LoadingDialog dialog) {
                        dialog.cancel();//加载框消失
                        Toast.makeText(mActivity, "处理完成或直接延时消失==延时消失", Toast.LENGTH_SHORT).show();
                    }
                });

LoadingDialog loadingDialog = builder.create();

loadingDialog.loadSuccess();  调用  CancelDelayListener.success()
loadingDialog.loadFail();  调用  CancelDelayListener.fail()
loadingDialog.cancelDelay();  调用  CancelDelayListener.complete() 


//注意 : 传入延时消失事件时,需要添加 dialog.cancel() 才能使加载框消失

loadingDialog.gif

方法二:

LoadingDialog loadingDialog = new LoadingDialog(context);
//显示加载框
loadingDialog.loading("处理中...");
//显示处理成功后取消加载框
loadingDialog.loadSuccess("处理成功");
//显示处理失败后取消加载框
loadingDialog.loadFail("处理失败");
//显示处理完成后取消加载框
loadingDialog.loadComplete("处理完成");

//显示审核成功后延时3s消失 调用SuccessCancelDelayListener.success()
 loadingDialog.loadSuccess("审核成功", 3000, new SuccessCancelDelayListener() {
                            @Override
                            public void success(LoadingDialog dialog) {
                                dialog.cancel();//加载框消失
                            }
                        });
//显示审核失败后延时3s消失 调用SuccessCancelDelayListener.fail()
loadingDialog.loadFail("审核失败", 3000, new FailCancelDelayListener() {
                            @Override
                            public void fail(LoadingDialog dialog) {
                                dialog.cancel();//加载框消失
                                Toast.makeText(mActivity, "审核失败==延时3s消失", Toast.LENGTH_SHORT).show();
                            }
                        });
//显示审核完成后延时3s消失 调用CompleteCancelDelayListener.complete()
loadingDialog.loadComplete("审核完成", 3000, new CompleteCancelDelayListener() {
                            @Override
                            public void complete(LoadingDialog dialog) {
                                dialog.cancel();//加载框消失
                                Toast.makeText(mActivity, "审核完成==延时3s消失", Toast.LENGTH_SHORT).show();
                            }
                        });//显示处理成功后延时3s消失并弹出toast
//延时3s消失 调用CompleteCancelDelayListener.complete()
loadingDialog.cancelDelay(3000, new CompleteCancelDelayListener() {
                            @Override
                            public void complete(LoadingDialog dialog) {
                                dialog.cancel();//加载框消失
                            }
                        });


loadingDialog.gif

当然, 方法一 可以和方法二混合使用

<think>好的,我现在需要帮助用户找到关于Android平台实现加载框的示例代码或教程。首先,我要根据用户提供的引用内容来寻找相关的资料。用户给出的引用中有几个提到了加载框、ProgressBar、RecyclerView点击效果、HAL层、so库加载以及分页和视图的问题。不过用户的问题主要集中在加载框的实现上,所以我需要优先查看引用中提到的相关内容。 首先,引用[1]提到了Android中的ProgressBar类用于加载中的对话框样式,这是一个重要的线索。用户可能需要使用ProgressBar来创建加载框。引用[2]虽然主要讲的是RecyclerView的点击效果,但可能涉及UI组件,但相关性较低。引用[3]到[5]更多涉及HAL层、so库和分页加载,可能和加载框关系不大,暂时可以忽略。 接下来,我需要确认用户需要的是哪种类型的加载框。通常Android中有两种常见的加载框:一种是ProgressBar,另一种是ProgressDialog。不过ProgressDialog在较新的Android版本中已经被弃用,推荐使用ProgressBar配合AlertDialog来实现。因此,在示例代码中应该展示这两种方法,并说明弃用的情况。 然后,用户可能需要自定义加载框的样式,比如修改颜色、形状或者使用第三方库。这时候需要引用一些常见的实现方式,比如使用自定义布局的AlertDialog,或者第三方库如Material Design Components中的ProgressIndicator。 现在,我需要根据引用[1]中的信息,给出一个使用ProgressBar的基本示例。可能还需要结合AlertDialog来创建一个模态的加载对话框,这样用户无法在加载过程中进行其他操作。另外,引用[5]提到了SwipeRefreshLayout用于下拉刷新,虽然和加载框不同,但可能相关的加载动画可以借鉴。 此外,用户可能需要处理加载完成后的对话框关闭,以及错误处理,比如加载失败时的提示。不过用户的问题主要是如何显示加载框,所以示例代码可能不需要涉及太复杂的逻辑,但最好包含基本的显示和隐藏操作。 最后,应该提醒用户关于性能和一些常见问题,比如内存泄漏,如果对话框在后台仍然持有Activity引用可能导致泄漏,因此需要在适当的生命周期方法中关闭对话框。同时,引用[4]提到加载so库需要包名和类名一致,虽然和加载框无关,但可能需要注意代码结构的一致性。 总结一下,回答的结构应该是先介绍基本实现方法,如使用ProgressBar和AlertDialog,然后展示示例代码,接着提到自定义样式和第三方库,最后给出注意事项和相关问题。需要确保示例代码正确,并符合用户提供的引用中的信息,尤其是引用[1]中的ProgressBar类。</think>在Android中实现加载框主要有两种常用方式:使用ProgressBar组件或自定义对话框。以下是具体实现方法和示例代码: ### 一、基础实现方法 #### 1. ProgressBar组件实现 在XML布局中添加ProgressBar: ```xml <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true" /> <!-- 循环动画效果 --> ``` 通过代码控制显示/隐藏: ```java ProgressBar progressBar = findViewById(R.id.progressBar); progressBar.setVisibility(View.VISIBLE); // 显示加载框 progressBar.setVisibility(View.GONE); // 隐藏加载框 ``` #### 2. 对话框形式实现(推荐) ```java // 创建加载对话框 AlertDialog loadingDialog = new AlertDialog.Builder(this) .setView(R.layout.custom_loading_dialog) .setCancelable(false) .create(); // 显示对话框 loadingDialog.show(); // 自定义布局示例(res/layout/custom_loading_dialog.xml): <LinearLayout> <ProgressBar android:layout_width="48dp" android:layout_height="48dp" android:indeterminateTint="@color/primary"/> <TextView android:text="加载中..."/> </LinearLayout> ``` ### 二、进阶实现方案 #### 1. 使用Material Design组件 在build.gradle添加依赖: ```gradle implementation 'com.google.android.material:material:1.6.0' ``` XML中使用: ```xml <com.google.android.material.progressindicator.CircularProgressIndicator android:indeterminate="true" app:indicatorColor="@color/primary" app:trackColor="@color/surface"/> ``` #### 2. 第三方库实现(如Loading动画库) ```java // 使用Android-SpinKit库 implementation 'com.github.ybq:Android-SpinKit:1.4.0' <com.github.ybq.android.spinkit.SpinKitView android:layout_width="wrap_content" android:layout_height="wrap_content" app:SpinKit_Color="@color/white" app:SpinKit_Style="FadingCircle"/> ``` ### 三、注意事项 1. 主线程原则:加载动画操作必须在UI线程执行[^1] 2. 内存管理:对话框需在`onDestroy()`中调用`dismiss()`防止内存泄漏 3. 样式规范:遵循Material Design的加载动画时长标准(建议0.5-1秒循环周期) 4. 替代方案:原ProgressDialog已废弃,推荐使用ProgressBar+AlertDialog组合[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值