From 6ad0ae0d22a8cad3fe1964145d944b0e9fa05d28 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Thu, 27 Nov 2025 11:06:31 +0800 Subject: [PATCH] =?UTF-8?q?homefragment=E7=AD=BE=E5=88=B0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=8E=A5=E5=85=A5=E6=AD=A3=E5=BC=8F=E7=9A=84bean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vididin/main/fragments/task/DayStatus.kt | 13 --- .../main/fragments/task/WeekStatusView.kt | 101 +++++------------- .../gamedog/vididin/manager/TaskManager.kt | 10 ++ 3 files changed, 38 insertions(+), 86 deletions(-) delete mode 100644 app/src/main/java/com/gamedog/vididin/main/fragments/task/DayStatus.kt diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DayStatus.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/DayStatus.kt deleted file mode 100644 index 59a4fd3..0000000 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/task/DayStatus.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.gamedog.vididin.main.fragments.task - -// DayStatus.kt -data class DayStatus( - val day: Int, // 第几天 (1-7) - val reward: String, // 奖励数值 ("100", "300"等) - val isCompleted: Boolean = false, // 是否已完成 - val isPastDay: Boolean = false, - val isToday: Boolean = false, // 是否是今天 - val icon: String = if (isCompleted) "✓" else "G" // 图标 -) { - val displayText: String get() = "Dia $day" -} \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/main/fragments/task/WeekStatusView.kt b/app/src/main/java/com/gamedog/vididin/main/fragments/task/WeekStatusView.kt index d0e85bf..e3a0089 100644 --- a/app/src/main/java/com/gamedog/vididin/main/fragments/task/WeekStatusView.kt +++ b/app/src/main/java/com/gamedog/vididin/main/fragments/task/WeekStatusView.kt @@ -9,7 +9,10 @@ import com.ama.core.common.util.sp import com.gamedog.vididin.R import android.graphics.* import com.ama.core.architecture.BaseApp -import java.util.* +import com.ama.core.architecture.util.ResUtil +import com.gamedog.vididin.manager.DailySignDayInfoBean +import com.gamedog.vididin.manager.TaskManager + class WeekStatusView @JvmOverloads constructor( context: Context, @@ -17,14 +20,12 @@ class WeekStatusView @JvmOverloads constructor( defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { - private var currentDay = 1 - private var dayStatusList: List = emptyList() - private var completedColor = Color.parseColor("#4CAF50") private var pendingColor = Color.parseColor("#FF9800") private var dayColor = Color.parseColor("#FF999999") private var dayPastColor = Color.parseColor("#FFD4D4D4") private var rewardTextColor = Color.parseColor("#FF9800") + private var rewardTextSignedColor = Color.parseColor("#999999") private var todayHighlightColor = Color.parseColor("#4CAF50") private var bgRectColor = Color.parseColor("#ffffedd7") @@ -59,7 +60,7 @@ class WeekStatusView @JvmOverloads constructor( init { setupAttributes(attrs) - setupDefaultData() + initLoadDatas() } private fun setupAttributes(attrs: AttributeSet?) { @@ -80,9 +81,8 @@ class WeekStatusView @JvmOverloads constructor( typedArray.recycle() } - private fun setupDefaultData() { - currentDay = getCurrentDayOfWeek() - dayStatusList = generateWeekData(currentDay) + private fun initLoadDatas() { + } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { @@ -97,10 +97,12 @@ class WeekStatusView @JvmOverloads constructor( override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - if (dayStatusList.isEmpty()) return + + val dayStateList = TaskManager.instance().getDayStateList() + if (dayStateList.isEmpty()) return val totalWidth = measuredWidth.toFloat() - val totalItemCount = dayStatusList.size + val totalItemCount = dayStateList.size val itemHoriGapPixel = (totalWidth - 2 * circleRadius - 2 * HoriMagin) / (totalItemCount - 1) // bg rect @@ -108,27 +110,27 @@ class WeekStatusView @JvmOverloads constructor( canvas.drawRect(circleRadius + HoriMagin, bgTop, totalWidth - circleRadius - HoriMagin, bgTop + bgRectHeight, bgPaint) - dayStatusList.forEachIndexed { index, dayStatus -> + dayStateList.forEachIndexed { index, dayStatus -> val centerX = HoriMagin + circleRadius + itemHoriGapPixel * index - drawDayStatusItem(canvas, dayStatus, centerX) + + // day text 'dia' + textPaint.color = if (dayStatus.hasSigned) dayPastColor else dayColor + textPaint.textSize = dayTextSize + canvas.drawText(ResUtil.getString(R.string.day) + " $index", centerX, vertiMagin + dayTextSize/2, textPaint) + + // icons + val iconRes = if (dayStatus.hasSigned) R.mipmap.task_week_view_done else R.mipmap.task_week_view_ongoing + canvas.drawBitmap(getBitmap(iconRes)!!, centerX - circleRadius, vertiMagin + dayTextSize + componentGap, circlePaint) + + // reward text + textPaint.textSize = rewardTextSize + val rewardNum = TaskManager.instance().getRewardNumOfDailySign(index) + textPaint.color = if (dayStatus.hasSigned) rewardTextColor else rewardTextSignedColor + canvas.drawText(rewardNum.toString(), centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint) } } - private fun drawDayStatusItem(canvas: Canvas, dayStatus: DayStatus, centerX: Float) { - // day text 'dia' - textPaint.color = if (dayStatus.isCompleted) dayPastColor else dayColor - textPaint.textSize = dayTextSize - canvas.drawText(dayStatus.displayText, centerX, vertiMagin + dayTextSize/2, textPaint) - // icons - val iconRes = if (dayStatus.isCompleted) R.mipmap.task_week_view_done else R.mipmap.task_week_view_ongoing - canvas.drawBitmap(getBitmap(iconRes)!!, centerX - circleRadius, vertiMagin + dayTextSize + componentGap, circlePaint) - - // reward text - textPaint.color = rewardTextColor - textPaint.textSize = rewardTextSize - canvas.drawText(dayStatus.reward, centerX, vertiMagin + dayTextSize + componentGap + 2*circleRadius + componentGap, textPaint) - } fun getBitmap(resId: Int): Bitmap? { return try { @@ -141,52 +143,5 @@ class WeekStatusView @JvmOverloads constructor( - // --------------------- public --------------------- - fun updateData(data: List) { - dayStatusList = data - invalidate() - } - - fun updateForDate(targetDate: Date) { - val targetDay = getDayOfWeekFromDate(targetDate) - dayStatusList = generateWeekData(targetDay) - invalidate() - } - - fun refreshToCurrentDate() { - updateForDate(Date()) - } - - fun getCurrentData(): List = dayStatusList - - fun getCurrentDay(): Int = currentDay - - - private fun generateWeekData(targetDay: Int): List { - val rewards = listOf("100", "300", "300", "500", "300", "300", "800") - - return (1..7).map { day -> - DayStatus( - day = day, - reward = rewards[day - 1], - isCompleted = day < targetDay, - isToday = day == targetDay - ) - } - } - - private fun getCurrentDayOfWeek(): Int { - val calendar = Calendar.getInstance() - return convertCalendarDayToWeekDay(calendar.get(Calendar.DAY_OF_WEEK)) - } - - private fun getDayOfWeekFromDate(date: Date): Int { - val calendar = Calendar.getInstance().apply { time = date } - return convertCalendarDayToWeekDay(calendar.get(Calendar.DAY_OF_WEEK)) - } - - private fun convertCalendarDayToWeekDay(calendarDay: Int): Int { - return if (calendarDay == 1) 7 else calendarDay - 1 - } } \ No newline at end of file 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 e22d9ad..c0f8241 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/TaskManager.kt @@ -239,6 +239,16 @@ class TaskManager private constructor() { return -1; } + + fun getDayStateList(): List { + return mDailySignData.signStateList + } + + fun getRewardNumOfDailySign(dayIndex: Int) : Int { + return getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0 + } + + }