今天给大家分享一个开源很久的一个动画弹窗,可以用于我的加载数据时的一个等待动画
使用步骤
第一步:首先添加依赖到build.gradle
//加载中的dialog
implementation 'com.wang.avi:library:2.1.3'
第二步:创建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
}
}
}
第三步:在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>
第四步: 在themes或者style添加主题
<style name="TransparentDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
这个时候dialog的所有准备都已经完成了,我们要做的就是在activity/fragment中进行调用
//显示
LoadingDialog.getInstance(this)?.show()
//关闭
LoadingDialog.getInstance(this)?.dismiss()
这样我们的动画弹窗就完成了,这个库里的样式还是挺多的,如果刚好没有适合你的,那只能自己去自定义或者是把他的源码拿出来,在源码中添加适合自己的.新人报道,大家多多支持