diff --git a/LibDialog/build.gradle b/LibDialog/build.gradle index 054c9d8c8003637f5e44d72adbf33a2c1f6f32a7..329f2ab271570f16148c78d5eae08e656f928771 100644 --- a/LibDialog/build.gradle +++ b/LibDialog/build.gradle @@ -42,5 +42,5 @@ afterEvaluate { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' + compileOnly 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1' } \ No newline at end of file diff --git a/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt b/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt index db5bb15a6638d19a61adc8a19c1f3c0c26ea1bd0..e7bc942cbbe200d9b8c7adf48d9b33341ffaba5f 100644 --- a/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt +++ b/LibDialog/src/main/java/com/mx/dialog/progress/MXLoadingDialog.kt @@ -1,22 +1,27 @@ package com.mx.dialog.progress +import android.animation.ObjectAnimator import android.content.Context import android.graphics.drawable.Drawable import android.os.Bundle import android.view.ViewGroup import android.widget.FrameLayout -import android.widget.ProgressBar +import android.widget.ImageView import android.widget.TextView import com.mx.dialog.R import com.mx.dialog.base.MXBaseCardDialog +import com.mx.dialog.utils.MXUtils open class MXLoadingDialog(context: Context) : MXBaseCardDialog(context) { private var loadingMessage: CharSequence? = null private var indeterminateDrawable: Drawable? = null - private var progressBar: ProgressBar? = null + private var loadingImg: ImageView? = null private var loadingTxv: TextView? = null + private var loadingAnimator: ObjectAnimator? = null + private var userSetAnimator: ObjectAnimator? = null + override fun getContentLayoutId(): Int { return R.layout.mx_content_loading } @@ -35,20 +40,23 @@ open class MXLoadingDialog(context: Context) : MXBaseCardDialog(context) { } private fun initView() { - progressBar = findViewById(R.id.mxProgressBar) + loadingImg = findViewById(R.id.mxLoadingImg) loadingTxv = findViewById(R.id.mxLoadingTxv) + + loadingImg?.let { loadingAnimator = MXUtils.rotationAnimation(it, 1000) } } private fun initData() { loadingTxv?.text = loadingMessage ?: "正在加载中..." - - kotlin.run { // Icon设置 - val width = - context.resources.getDimensionPixelOffset(R.dimen.mx_dialog_size_progress_img) + loadingImg?.let { progressBar -> // Icon设置 val drawable = indeterminateDrawable - ?: context.resources.getDrawable(R.drawable.mx_dialog_progress_loading) - drawable.setBounds(0, 0, width, width) - progressBar?.indeterminateDrawable = drawable + if (drawable != null) { + progressBar.setImageDrawable(drawable) + userSetAnimator?.start() + } else { + progressBar.setImageResource(R.drawable.mx_dialog_icon_loading) + loadingAnimator?.start() + } } } @@ -59,12 +67,22 @@ open class MXLoadingDialog(context: Context) : MXBaseCardDialog(context) { } override fun onDismissTicket(maxSecond: Int, remindSecond: Int) { - } - fun setIndeterminateDrawable(drawable: Drawable) { + fun setIndeterminateDrawable(drawable: Drawable, animator: ObjectAnimator? = null) { indeterminateDrawable = drawable + if (animator != null) { + this.loadingAnimator?.end() + this.userSetAnimator?.end() + this.userSetAnimator = animator + } initData() } + + override fun dismiss() { + loadingAnimator?.cancel() + loadingAnimator = null + super.dismiss() + } } \ No newline at end of file diff --git a/LibDialog/src/main/java/com/mx/dialog/utils/MXUtils.kt b/LibDialog/src/main/java/com/mx/dialog/utils/MXUtils.kt index 8c2a99f61e2ae6fea4fa9d61bdb1736bdbb089c4..e31d51602b31acb465efd39194b59924ccd7172c 100644 --- a/LibDialog/src/main/java/com/mx/dialog/utils/MXUtils.kt +++ b/LibDialog/src/main/java/com/mx/dialog/utils/MXUtils.kt @@ -1,6 +1,9 @@ package com.mx.dialog.utils +import android.animation.ObjectAnimator +import android.animation.ValueAnimator import android.content.Context +import android.view.View import com.mx.dialog.BuildConfig import java.text.DecimalFormat import kotlin.math.max @@ -64,6 +67,15 @@ internal object MXUtils { return DecimalFormat("#0.00").format(this) } + fun rotationAnimation(view: View, duration: Long): ObjectAnimator { + val animator = ObjectAnimator.ofFloat(view, "rotation", view.rotation, view.rotation + 360f) + animator.duration = duration + animator.interpolator = null + animator.repeatMode = ValueAnimator.RESTART + animator.repeatCount = -1 + return animator + } + fun getScreenWidthDP(appContext: Context): Int = (getScreenWidth(appContext) / getScreenDensity(appContext)).roundToInt() diff --git a/LibDialog/src/main/res/drawable/mx_dialog_progress_loading.xml b/LibDialog/src/main/res/drawable/mx_dialog_progress_loading.xml deleted file mode 100644 index 8e341ac140e6c152866debf28540ce36ff3a53cf..0000000000000000000000000000000000000000 --- a/LibDialog/src/main/res/drawable/mx_dialog_progress_loading.xml +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/LibDialog/src/main/res/layout/mx_content_loading.xml b/LibDialog/src/main/res/layout/mx_content_loading.xml index e80d7145c91b93fdfc2e61274ad1f1875bd0a76f..aed21f023b8cf2298243f97f26686501bd2f59ee 100644 --- a/LibDialog/src/main/res/layout/mx_content_loading.xml +++ b/LibDialog/src/main/res/layout/mx_content_loading.xml @@ -7,14 +7,12 @@ android:paddingHorizontal="30dp" android:paddingVertical="20dp"> - + android:scaleType="centerInside" + android:src="@drawable/mx_dialog_icon_loading" />