您好,登錄后才能下訂單哦!
小編給大家分享一下Android如何實現自定義加載框效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
效果圖
菊花圖標(mipmap-xxhdpi)
加載框圓角背景drawable
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="12dp" /> <solid android:color="@color/transparent_black"/> </shape>
布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> </data> <androidx.constraintlayout.widget.ConstraintLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_message_dialog" android:minWidth="132dp" android:minHeight="100dp" android:padding="15dp"> <ImageView android:id="@+id/iv" android:layout_width="35dp" android:layout_height="35dp" android:src="@mipmap/ic_loading" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/tv"/> <TextView android:id="@+id/tv" android:layout_width="0dp" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="@color/white" android:layout_marginTop="15dp" android:text="@string/loading" android:lineSpacingExtra="8dp" android:gravity="center_horizontal" app:layout_constraintTop_toBottomOf="@id/iv" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
LoadingDialog.kt
package com.lzk.libcommon.widget import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.Window import android.view.animation.LinearInterpolator import androidx.databinding.DataBindingUtil import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import com.blankj.utilcode.util.LogUtils import com.lzk.libcommon.R import com.lzk.libcommon.databinding.ViewLoadingDialogBinding /** * @Author: LiaoZhongKai * @Date: 2021/7/14 9:04 * @Description: 加載框 */ class LoadingDialog: DialogFragment() { private var mTips: String? = null private lateinit var mLoadingDialogBinding: ViewLoadingDialogBinding private lateinit var mAnimation: ObjectAnimator override 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)) //去掉Padding decorView.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.INFINITE repeatMode = ValueAnimator.RESTART interpolator = LinearInterpolator() duration = 1000 } mAnimation.start() } override fun onDestroyView() { super.onDestroyView() mAnimation.cancel() } //顯示 fun showDialog(fragmentManager: FragmentManager, msg: String? = null){ mTips = msg if (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.VISIBLE if (!msg.isNullOrEmpty()){ mLoadingDialogBinding.tv.text = msg } return this } }
基類封裝
abstract class BaseVMActivity<T: ViewDataBinding,VM: BaseViewModel> : AppCompatActivity(){ private var mLoadingDialog: LoadingDialog? = null override fun onDestroy() { super.onDestroy() mLoadingDialog?.dismissDialog() mLoadingDialog = null } /** * 顯示加載彈框 */ fun showLoadingDialog(msg: String? = null){ mLoadingDialog = LoadingDialog() mLoadingDialog!!.showDialog(supportFragmentManager,msg) } /** * 隱藏加載彈框 */ fun dismissLoadingDialog(){ mLoadingDialog?.dismissDialog() } }
以上是“Android如何實現自定義加載框效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。