Android动画弹窗

 

 

一、动画弹窗是什么

动画弹窗就是用来在我们调用接口或者是加载数据的时候给用户呈现出一个等待效果的弹窗

二、使用步骤

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的类名称上面的注释中已经给大家写好了,大家自己切换就可以了


最后大家要是觉得我的文章有用,请大家多多支持,点点关注,点点收藏,谢谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值