一、动画弹窗是什么
动画弹窗就是用来在我们调用接口或者是加载数据的时候给用户呈现出一个等待效果的弹窗
二、使用步骤
1.引入库
代码如下(示例):
//加载中的dialog
implementation 'com.wang.avi:library:2.1.3'
2.创建Dialog类和创建布局
代码如下(示例):
package com.kt.network.dialog
import android.app.AlertDialog
import android.content.Context
import android.os.Bundle
import android.view.View
import com.kt.ktmvvm.lib.R
import com.wang.avi.AVLoadingIndicatorView
/**
* @author 浩楠
*
* @date 2023/1/18 13:48.
*
* _ _ _ _ ____ _ _ _
* / \ _ __ __| |_ __ ___ (_) __| | / ___|| |_ _ _ __| (_) ___
* / _ \ | '_ \ / _` | '__/ _ \| |/ _` | \___ \| __| | | |/ _` | |/ _ \
* / ___ \| | | | (_| | | | (_) | | (_| | ___) | |_| |_| | (_| | | (_) |
* /_/ \_\_| |_|\__,_|_| \___/|_|\__,_| |____/ \__|\__,_|\__,_|_|\___/
* 描述:加载中Dialog
* 加载的样式
* "BallPulseIndicator"
* "BallGridPulseIndicator"
* "BallClipRotateIndicator"
* "BallClipRotatePulseIndicator"
* "SquareSpinIndicator"
* "BallClipRotateMultipleIndicator"
* "BallPulseRiseIndicator"
* "BallRotateIndicator"
* "CubeTransitionIndicator"
* "BallZigZagIndicator"
* "BallZigZagDeflectIndicator"
* "BallTrianglePathIndicator"
* "BallScaleIndicator"
* "LineScaleIndicator"
* "LineScalePartyIndicator"
* "BallScaleMultipleIndicator"
* "BallPulseSyncIndicator"
* "BallBeatIndicator"
* "LineScalePulseOutIndicator"
* "LineScalePulseOutRapidIndicator"
* "BallScaleRippleIndicator"
* "BallScaleRippleMultipleIndicator"
* "BallSpinFadeLoaderIndicator"
* "LineSpinFadeLoaderIndicator"
* "TriangleSkewSpinIndicator"
* "PacmanIndicator"
* "BallGridBeatIndicator"
* "SemiCircleSpinIndicator"
* "com.wang.avi.sample.MyCustomIndicator"
*/
class LoadingDialog(context: Context?, themeResId: Int) :
AlertDialog(context, themeResId) {
private var avi: AVLoadingIndicatorView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.setContentView(R.layout.dialog_loading)
avi = findViewById<View>(R.id.avi) as AVLoadingIndicatorView
avi!!.setIndicator("PacmanIndicator")
}
override fun show() {
super.show()
avi!!.show()
}
override fun dismiss() {
super.dismiss()
avi!!.hide()
}
companion object {
private var loadingDialog: LoadingDialog? = null
fun getInstance(context: Context?): LoadingDialog? {
loadingDialog = LoadingDialog(context, R.style.TransparentDialog) //设置AlertDialog背景透明
loadingDialog!!.setCancelable(false)
loadingDialog!!.setCanceledOnTouchOutside(false)
return loadingDialog
}
}
}
这时会有报错,但是大家别急,我这就给大家解决报错
我们现在要做的就是在res文件夹的layout文件夹中创建一个 dialog_loading布局文件
<?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="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/avi"
style="@style/AVLoadingIndicatorView.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:indicatorColor="#ffffff"
app:indicatorName="LineSpinFadeLoaderIndicator" />
</RelativeLayout>
然后在res文件夹下的values中的themes或者style中创建一个弹窗的主题
<style name="TransparentDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
到目前为止,我们已经把这个弹窗已经写完了,我们来看一下怎么引用,在你的activity或者fragment中创建两个按钮,一个显示,一个隐藏,就可以测试了
//显示
LoadingDialog.getInstance(this)?.show()
//关闭
LoadingDialog.getInstance(this)?.dismiss()
到了现在,很多朋友的已经没有问题了,而此时他们关心的是为什么那么多样式,我怎么切换别的样式,别急我这就告诉大家怎么切换
我们现在回到LoadingDialog中找到这行代码
avi!!.setIndicator("PacmanIndicator")
我们只需要改变setIndicator中的字符串就可以了
这时有人问题,那别的样式在哪里?
别急别急!!!
这就给你们
加载的样式
* "BallPulseIndicator"
* "BallGridPulseIndicator"
* "BallClipRotateIndicator"
* "BallClipRotatePulseIndicator"
* "SquareSpinIndicator"
* "BallClipRotateMultipleIndicator"
* "BallPulseRiseIndicator"
* "BallRotateIndicator"
* "CubeTransitionIndicator"
* "BallZigZagIndicator"
* "BallZigZagDeflectIndicator"
* "BallTrianglePathIndicator"
* "BallScaleIndicator"
* "LineScaleIndicator"
* "LineScalePartyIndicator"
* "BallScaleMultipleIndicator"
* "BallPulseSyncIndicator"
* "BallBeatIndicator"
* "LineScalePulseOutIndicator"
* "LineScalePulseOutRapidIndicator"
* "BallScaleRippleIndicator"
* "BallScaleRippleMultipleIndicator"
* "BallSpinFadeLoaderIndicator"
* "LineSpinFadeLoaderIndicator"
* "TriangleSkewSpinIndicator"
* "PacmanIndicator"
* "BallGridBeatIndicator"
* "SemiCircleSpinIndicator"
* "com.wang.avi.sample.MyCustomIndicator"
细心的朋友也会发现,我们的 LoadingDialog的类名称上面的注释中已经给大家写好了,大家自己切换就可以了