From f5162cb3a882a482b808c1fa1927d6272992c14e Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Fri, 28 Nov 2025 18:07:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E9=87=91=E5=B8=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=80=BB=E8=BE=91=E5=8F=8AUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gamedog/vididin/VididinEvents.kt | 3 + .../vididin/main/fragments/HomeFragment.kt | 21 ++++ .../home/fragment/HomeItemFragment.kt | 4 + .../vididin/widget/HomeDragIconView.kt | 42 +++---- .../vididin/youtubestatistic/RewardConst.kt | 8 ++ .../vididin/youtubestatistic/TickerTimer.kt | 119 ++++++++++++++++++ .../main/res/layout/layout_drag_icon_view.xml | 6 +- .../vididinapp_feature_home_fragment_home.xml | 1 + .../src/main/res/values/colors.xml | 2 +- 9 files changed, 180 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/gamedog/vididin/youtubestatistic/RewardConst.kt create mode 100644 app/src/main/java/com/gamedog/vididin/youtubestatistic/TickerTimer.kt diff --git a/app/src/main/java/com/gamedog/vididin/VididinEvents.kt b/app/src/main/java/com/gamedog/vididin/VididinEvents.kt index 68c385c..00c4da2 100644 --- a/app/src/main/java/com/gamedog/vididin/VididinEvents.kt +++ b/app/src/main/java/com/gamedog/vididin/VididinEvents.kt @@ -6,4 +6,7 @@ object VididinEvents { const val Event_Account_Cash_Changed = 602 const val Event_Account_Bank_Info_Changed = 603 + + const val Event_HOME_WATCH_Time_TICK = 700 + } \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt index deec360..e66687f 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/HomeFragment.kt @@ -15,10 +15,14 @@ import com.ama.core.architecture.appBase.AppViewsFragment import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.util.setStatusBarDarkFont import com.ama.core.common.util.asSafe +import com.gamedog.vididin.VididinEvents +import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.main.fragments.home.HomeFragmentStateAdapter import com.gamedog.vididin.main.fragments.home.fragment.HomeItemFragment import com.gamedog.vididin.main.interfaces.OnSwitchTabListener import com.gamedog.vididin.main.interfaces.OnTabStyleListener +import com.gamedog.vididin.youtubestatistic.RewardConst +import com.gamedog.vididin.youtubestatistic.TickerTimer import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import kotlin.getValue @@ -31,6 +35,7 @@ import com.gamedog.vididin.main.fragments.home.YoutubeUiState as UiState @AndroidEntryPoint class HomeFragment : AppViewsFragment(), OnSwitchTabListener, OnFragmentBackgroundListener { + private var mTotalMs: Long = 0L override val mViewModel: ViewModel by viewModels() override var isBackgroundBright: Boolean = true @@ -54,6 +59,22 @@ class HomeFragment : AppViewsFragment(), OnSwit viewPager2.setPageTransformer { _, _ -> } viewPager2.offscreenPageLimit = 1 viewPager2.adapter = mViewPagerAdapter + + registerEvents({ + handleWatchTimeTick() + }, VididinEvents.Event_HOME_WATCH_Time_TICK,) + } + + private fun handleWatchTimeTick() { + mTotalMs += TickerTimer.Notify_Interval_MS + if (mTotalMs < RewardConst.HOME_WATCH_DURATION) { + binding?.dragIconView?.setProgress(mTotalMs * 100/RewardConst.HOME_WATCH_DURATION) + } else { + mTotalMs = 0L + binding?.dragIconView?.setProgress(mTotalMs * 100/ RewardConst.HOME_WATCH_DURATION) + AccountManager.addGold(RewardConst.HOME_WATCH_REWARD_NUM) + binding?.dragIconView?.showRewardGoldAnim() + } } override fun ViewBinding.initListeners() { diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt index 792bd2e..22231c6 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/home/fragment/HomeItemFragment.kt @@ -18,6 +18,7 @@ import com.gamedog.vididin.beans.YoutubeVideo import com.gamedog.vididin.main.WatchVideoDialog import com.gamedog.vididin.router.Router import com.gamedog.vididin.widget.MyPlayerControlView +import com.gamedog.vididin.youtubestatistic.TickerTimer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener @@ -34,6 +35,7 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { private var mIsPlaying: Boolean = false private var mCurPlayedSecond: Float = 0F private var mTotalDuration: Float = -1F + private val mTickerTimer = TickerTimer() override fun inflateViewBinding( @@ -167,6 +169,8 @@ class HomeItemFragment : AppViewsEmptyViewModelFragment() { } else { showPlayIconAnim() } + + if (mIsPlaying) mTickerTimer.start() else mTickerTimer.pause() } } 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 d4d4268..7360a5b 100644 --- a/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt +++ b/app/src/main/java/com/gamedog/vididin/widget/HomeDragIconView.kt @@ -10,7 +10,6 @@ import android.view.LayoutInflater import android.widget.LinearLayout import androidx.core.view.isVisible import com.gamedog.vididin.databinding.LayoutDragIconViewBinding -import com.gamedog.vididin.manager.TaskManager class HomeDragIconView @JvmOverloads constructor( context: Context, @@ -24,45 +23,36 @@ class HomeDragIconView @JvmOverloads constructor( init { mBinding = LayoutDragIconViewBinding.inflate(LayoutInflater.from(context), this, true) mBinding.run { - progressBar.setProgressListener { progress-> - if (progress >= 100) { - tvGoldNum.text = buildString { - append("+") - append(TaskManager.instance().getHomeWatchDurationRewardNum()) - } - executeGoldNumAnim() - } - } } } - private fun executeGoldNumAnim() { + fun showRewardGoldAnim() { val animView = mBinding.llGoldRoot val alphaAnimator = ObjectAnimator.ofFloat( animView, "alpha", - 0.5f, 1.0f, 0.5f + 0.5f, 1.0f ).apply { - duration = 500 + duration = 1500 } val scaleXAnimator = ObjectAnimator.ofFloat( animView, "scaleX", - 0.5f, 1.0f, 0.5f + 0.5f, 1.1f, 1F ).apply { - duration = 500 + duration = 1500 } val scaleYAnimator = ObjectAnimator.ofFloat( animView, "scaleY", - 0.5f, 1.0f, 0.5f + 0.5f, 1.1f, 1F ).apply { - duration = 500 + duration = 1500 } @@ -70,13 +60,15 @@ class HomeDragIconView @JvmOverloads constructor( animatorSet.playTogether(alphaAnimator, scaleXAnimator, scaleYAnimator) animatorSet.addListener(object : Animator.AnimatorListener { override fun onAnimationCancel(animation: Animator) { - animView.isVisible = false - mBinding.progressBar.setProgress(0) + postDelayed({ + animView.visibility = INVISIBLE + }, 1000) } override fun onAnimationEnd(animation: Animator) { - animView.isVisible = false - mBinding.progressBar.setProgress(0) + postDelayed({ + animView.visibility = INVISIBLE + }, 1000) } override fun onAnimationRepeat(animation: Animator) { @@ -84,12 +76,18 @@ class HomeDragIconView @JvmOverloads constructor( } override fun onAnimationStart(animation: Animator) { - + animView.isVisible = true } }) animatorSet.start() } + + + fun setProgress(progress: Long) { + mBinding.progressBar.setProgress(progress.toInt()) + } + } diff --git a/app/src/main/java/com/gamedog/vididin/youtubestatistic/RewardConst.kt b/app/src/main/java/com/gamedog/vididin/youtubestatistic/RewardConst.kt new file mode 100644 index 0000000..f958c87 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/youtubestatistic/RewardConst.kt @@ -0,0 +1,8 @@ +package com.gamedog.vididin.youtubestatistic + +class RewardConst { + companion object { + const val HOME_WATCH_DURATION = 5 * 1000L + const val HOME_WATCH_REWARD_NUM = 28 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/youtubestatistic/TickerTimer.kt b/app/src/main/java/com/gamedog/vididin/youtubestatistic/TickerTimer.kt new file mode 100644 index 0000000..101fb87 --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/youtubestatistic/TickerTimer.kt @@ -0,0 +1,119 @@ +package com.gamedog.vididin.youtubestatistic + +import android.os.Handler +import android.os.HandlerThread +import android.os.Looper +import com.ama.core.architecture.util.eventbus.NotifyMan +import com.gamedog.vididin.VididinEvents + + + + +class TickerTimer() { + + private val mCountHandler: Handler by lazy { + Handler(Looper.getMainLooper()) + } + private val mCounterRunnable by lazy { + object : Runnable { + override fun run() { + if (isRunning) { + handleNewTick() + mCountHandler.postDelayed(this, Notify_Interval_MS) + } + } + } + } + + @Volatile + private var isRunning = false + + + + + companion object { + const val Notify_Interval_MS = 50L + } + + init { + + } + + + @Synchronized + fun start() { + isRunning = true + mCountHandler.postDelayed(mCounterRunnable, Notify_Interval_MS) + } + + + private fun handleNewTick() { + NotifyMan.instance().sendEvent(VididinEvents.Event_HOME_WATCH_Time_TICK, null) + } + + fun pause() { + if (!isRunning) return + isRunning = false + } + + + fun release() { + isRunning = false + mCounterRunnable.let { mCountHandler.removeCallbacks(it) } + } + + /* + private val mHandlerThread = HandlerThread("HomeCountTimeThread") + private val mCountHandler: Handler by lazy { + Handler(mHandlerThread.looper) + } + private val mCounterRunnable by lazy { + object : Runnable { + override fun run() { + if (isRunning) { + handleNewTick() + mCountHandler.postDelayed(this, Notify_Interval_MS) + } + } + } + } + + @Volatile + private var isRunning = false + + + + + companion object { + const val HOME_WATCH_DURATION = 5 * 1000L + const val Notify_Interval_MS = 50L + } + + init { + mHandlerThread.start() + } + + + @Synchronized + fun start() { + isRunning = true + mCountHandler.postDelayed(mCounterRunnable, Notify_Interval_MS) + } + + + private fun handleNewTick() { + NotifyMan.instance().sendEvent(VididinEvents.Event_HOME_WATCH_Time_TICK, null) + } + + fun pause() { + if (!isRunning) return + isRunning = false + } + + + fun release() { + isRunning = false + mCounterRunnable.let { mCountHandler.removeCallbacks(it) } + mHandlerThread.quitSafely() + }*/ +} \ No newline at end of file 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 063c167..d0485e3 100644 --- a/app/src/main/res/layout/layout_drag_icon_view.xml +++ b/app/src/main/res/layout/layout_drag_icon_view.xml @@ -6,13 +6,13 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:gravity="center_horizontal" - android:paddingVertical="7dp" tools:ignore="ResourceName"> diff --git a/app/src/main/res/layout/vididinapp_feature_home_fragment_home.xml b/app/src/main/res/layout/vididinapp_feature_home_fragment_home.xml index b8f9ec2..d09f284 100644 --- a/app/src/main/res/layout/vididinapp_feature_home_fragment_home.xml +++ b/app/src/main/res/layout/vididinapp_feature_home_fragment_home.xml @@ -12,6 +12,7 @@ android:orientation="vertical"/> #FF00FF5E - #99000000 + #33FFFFFF #ff938a84