Android自定义加载框效果

本文实例为大家分享了Android自定义加载框效果的具体代码,供大家参考,具体内容如下
效果图
Android自定义加载框效果
文章图片

菊花图标(mipmap-xxhdpi)
【Android自定义加载框效果】Android自定义加载框效果
文章图片

加载框圆角背景drawable


布局文件

LoadingDialog.kt
package com.lzk.libcommon.widgetimport android.animation.ObjectAnimatorimport android.animation.ValueAnimatorimport android.graphics.Colorimport android.graphics.drawable.ColorDrawableimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.view.Windowimport android.view.animation.LinearInterpolatorimport androidx.databinding.DataBindingUtilimport androidx.fragment.app.DialogFragmentimport androidx.fragment.app.FragmentManagerimport com.blankj.utilcode.util.LogUtilsimport com.lzk.libcommon.Rimport com.lzk.libcommon.databinding.ViewLoadingDialogBinding/** * @Author: LiaoZhongKai * @Date: 2021/7/14 9:04 * @Description: 加载框 */class LoadingDialog: DialogFragment() {private var mTips: String? = nullprivate lateinit var mLoadingDialogBinding: ViewLoadingDialogBindingprivate lateinit var mAnimation: ObjectAnimatoroverride fun onStart() {super.onStart()//去掉DialogFragment外部的背景色dialog?.window?.apply {attributes = attributes.apply {//======================这里设置背景阴影透明度===============//======================0是全透明===========================dimAmount = 0.0f}}}override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View {mLoadingDialogBinding = DataBindingUtil.inflate(inflater, R.layout.view_loading_dialog,container,false)dialog?.apply {requestWindowFeature(Window.FEATURE_NO_TITLE)setCanceledOnTouchOutside(false)window?.apply {//去掉DialogFragment内部的背景色setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))//去掉PaddingdecorView.setPadding(0,0,0,0)}}return mLoadingDialogBinding.root}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)rotate()setTips(mTips)}private fun rotate(){mAnimation = ObjectAnimator.ofFloat(mLoadingDialogBinding.iv,"rotation",360f).apply {repeatCount = ObjectAnimator.INFINITErepeatMode = ValueAnimator.RESTARTinterpolator = LinearInterpolator()duration = 1000}mAnimation.start()}override fun onDestroyView() {super.onDestroyView()mAnimation.cancel()}//显示fun showDialog(fragmentManager: FragmentManager, msg: String? = null){mTips = msgif (isVisible){dismiss()}show(fragmentManager,"")}//隐藏fun dismissDialog(){if (isAdded){dismiss()mTips = null}}/*** 设置加载提示文字*/private fun setTips(msg: String?): LoadingDialog{mLoadingDialogBinding.tv.visibility = if (msg.isNullOrEmpty()) View.GONE else View.VISIBLEif (!msg.isNullOrEmpty()){mLoadingDialogBinding.tv.text = msg}return this}}

基类封装
abstract class BaseVMActivity : AppCompatActivity(){ private var mLoadingDialog: LoadingDialog? = nulloverride fun onDestroy() {super.onDestroy()mLoadingDialog?.dismissDialog()mLoadingDialog = null} /*** 显示加载弹框*/fun showLoadingDialog(msg: String? = null){mLoadingDialog = LoadingDialog()mLoadingDialog!!.showDialog(supportFragmentManager,msg)}/*** 隐藏加载弹框*/fun dismissLoadingDialog(){mLoadingDialog?.dismissDialog()}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读