From adc0a451b78c8bbe787f0a6f245763a5491f47da Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Tue, 25 Nov 2025 14:59:50 +0800 Subject: [PATCH] =?UTF-8?q?home=E5=8A=A8=E7=94=BB=EF=BC=8C=E9=87=91?= =?UTF-8?q?=E5=B8=81progress=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gamedog/vididin/manager/TaskManager.kt | 4 ++ .../vididin/widget/HomeDragIconView.kt | 72 ++++++++++++++++++- .../main/res/layout/layout_drag_icon_view.xml | 23 ++---- .../architecture/widget/CircleProgressBar.kt | 7 ++ 4 files changed, 84 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt index ba2d174..fc7226a 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt @@ -58,6 +58,10 @@ class TaskManager private constructor() { initialized = true } } + + fun getHomeWatchDurationRewardNum(): Int { + return 28; // TODO - mTaskConfigBean.xxxx + } } diff --git a/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt b/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt index 93c42a8..d4d4268 100644 --- a/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt +++ b/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt @@ -1,12 +1,16 @@ package com.gamedog.vididin.widget +import android.animation.Animator +import android.animation.AnimatorSet +import android.animation.ObjectAnimator import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout +import androidx.core.view.isVisible import com.gamedog.vididin.databinding.LayoutDragIconViewBinding -import kotlin.run +import com.gamedog.vididin.manager.TaskManager class HomeDragIconView @JvmOverloads constructor( context: Context, @@ -14,16 +18,78 @@ class HomeDragIconView @JvmOverloads constructor( defStyleAttr: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr) { - private var mBinding: LayoutDragIconViewBinding? = null + private var mBinding: LayoutDragIconViewBinding init { mBinding = LayoutDragIconViewBinding.inflate(LayoutInflater.from(context), this, true) - mBinding?.run { + mBinding.run { + progressBar.setProgressListener { progress-> + if (progress >= 100) { + tvGoldNum.text = buildString { + append("+") + append(TaskManager.instance().getHomeWatchDurationRewardNum()) + } + executeGoldNumAnim() + } + } } } + + private fun executeGoldNumAnim() { + val animView = mBinding.llGoldRoot + + val alphaAnimator = ObjectAnimator.ofFloat( + animView, + "alpha", + 0.5f, 1.0f, 0.5f + ).apply { + duration = 500 + } + + val scaleXAnimator = ObjectAnimator.ofFloat( + animView, + "scaleX", + 0.5f, 1.0f, 0.5f + ).apply { + duration = 500 + } + + val scaleYAnimator = ObjectAnimator.ofFloat( + animView, + "scaleY", + 0.5f, 1.0f, 0.5f + ).apply { + duration = 500 + } + + + val animatorSet = AnimatorSet() + animatorSet.playTogether(alphaAnimator, scaleXAnimator, scaleYAnimator) + animatorSet.addListener(object : Animator.AnimatorListener { + override fun onAnimationCancel(animation: Animator) { + animView.isVisible = false + mBinding.progressBar.setProgress(0) + } + + override fun onAnimationEnd(animation: Animator) { + animView.isVisible = false + mBinding.progressBar.setProgress(0) + } + + override fun onAnimationRepeat(animation: Animator) { + + } + + override fun onAnimationStart(animation: Animator) { + + } + }) + animatorSet.start() + } + } diff --git a/app/src/main/res/layout/layout_drag_icon_view.xml b/app/src/main/res/layout/layout_drag_icon_view.xml index bfa3d34..063c167 100644 --- a/app/src/main/res/layout/layout_drag_icon_view.xml +++ b/app/src/main/res/layout/layout_drag_icon_view.xml @@ -15,14 +15,15 @@ android:gravity="center_horizontal" android:orientation="vertical"> - Unit)? = null + + fun setProgressListener(progressListener: (progress: Int) -> Unit) { + this.progressListener = progressListener + } + fun setProgress(progress: Int) { this.currentProgress = progress.coerceIn(0, maxProgress) invalidate() + progressListener?.invoke(currentProgress) } fun setCenterIcon(@DrawableRes iconRes: Int) {