Android动画弹窗

162 阅读1分钟

5a000618711e472ca495a4d2978fbb33.gif

今天给大家分享一个开源很久的一个动画弹窗,可以用于我的加载数据时的一个等待动画

使用步骤

第一步:首先添加依赖到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()

这样我们的动画弹窗就完成了,这个库里的样式还是挺多的,如果刚好没有适合你的,那只能自己去自定义或者是把他的源码拿出来,在源码中添加适合自己的.新人报道,大家多多支持

u=2788769087,2164833357&fm=253&fmt=auto&app=138&f=JPEG.webp