Android自定義加載框效果
更新時間:2021年08月18日 17:03:02 作者:臥龍躍馬
這篇文章主要為大家詳細(xì)介紹了Android自定義加載框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Android自定義加載框效果的具體代碼,供大家參考,具體內(nèi)容如下
效果圖

菊花圖標(biāo)(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 {
//======================這里設(shè)置背景陰影透明度===============
//======================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內(nèi)部的背景色
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
}
}
/**
* 設(shè)置加載提示文字
*/
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()
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android OkHttp Post上傳文件并且攜帶參數(shù)實例詳解
這篇文章主要介紹了Android OkHttp Post上傳文件并且攜帶參數(shù)實例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Android?MaterialAlertDialogBuilder修改按鈕屬性
這篇文章主要介紹了Android?MaterialAlertDialogBuilder修改按鈕屬性實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
android通過bitmap生成新圖片關(guān)鍵性代碼
android通過bitmap生成新圖片具體實現(xiàn)如下,感興趣的朋友可以參考下哈,希望對你有所幫助2013-06-06
基于DownloadManager的簡單下載器編寫小結(jié)
Android自帶的DownloadManager是一個很好的下載文件的工具。該類在API level 9之后出現(xiàn),它已經(jīng)幫我們處理了下載失敗、重新下載等功能,整個下載過程全部交給系統(tǒng)負(fù)責(zé),不需要我們過多的處理,非常的nice。關(guān)鍵的是用起來也很簡單,稍微封裝一下就可以幾句話搞定下載2017-12-12

