91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現自定義加載框效果

發布時間:2021-08-22 16:31:48 來源:億速云 閱讀:519 作者:小新 欄目:開發技術

小編給大家分享一下Android如何實現自定義加載框效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

效果圖

 Android如何實現自定義加載框效果

菊花圖標(mipmap-xxhdpi)

 Android如何實現自定義加載框效果

加載框圓角背景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如何實現自定義加載框效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌恰县| 高要市| 海晏县| 嘉义市| 丰镇市| 额济纳旗| 新巴尔虎左旗| 焦作市| 威海市| 内丘县| 达尔| 孝昌县| 汾阳市| 当雄县| 万载县| 禄劝| 于都县| 灵台县| 新宁县| 丰原市| 安国市| 金寨县| 汝阳县| 循化| 普兰县| 巴林左旗| 伊春市| 呼伦贝尔市| 绥芬河市| 巴彦县| 临城县| 萝北县| 静海县| 威信县| 临澧县| 通榆县| 方正县| 灵台县| 扎鲁特旗| 鲁甸县| 扬州市|