Android自定義加載框效果
本文實例為大傢分享瞭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() } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Android繪制平移動畫的示例代碼
- Android 中使用RadioGroup和Fragment實現底部導航欄的功能
- Android實現動畫效果的自定義下拉菜單功能
- Android用動畫顯示或隱藏視圖
- Android用viewPager2實現UI界面翻頁滾動的效果