homefragment签到模块接入正式的bean
This commit is contained in:
parent
d24c51ff22
commit
6ad0ae0d22
|
|
@ -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"
|
|
||||||
}
|
|
||||||
|
|
@ -9,7 +9,10 @@ import com.ama.core.common.util.sp
|
||||||
import com.gamedog.vididin.R
|
import com.gamedog.vididin.R
|
||||||
import android.graphics.*
|
import android.graphics.*
|
||||||
import com.ama.core.architecture.BaseApp
|
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(
|
class WeekStatusView @JvmOverloads constructor(
|
||||||
context: Context,
|
context: Context,
|
||||||
|
|
@ -17,14 +20,12 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
defStyleAttr: Int = 0
|
defStyleAttr: Int = 0
|
||||||
) : View(context, attrs, defStyleAttr) {
|
) : View(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
private var currentDay = 1
|
|
||||||
private var dayStatusList: List<DayStatus> = emptyList()
|
|
||||||
|
|
||||||
private var completedColor = Color.parseColor("#4CAF50")
|
private var completedColor = Color.parseColor("#4CAF50")
|
||||||
private var pendingColor = Color.parseColor("#FF9800")
|
private var pendingColor = Color.parseColor("#FF9800")
|
||||||
private var dayColor = Color.parseColor("#FF999999")
|
private var dayColor = Color.parseColor("#FF999999")
|
||||||
private var dayPastColor = Color.parseColor("#FFD4D4D4")
|
private var dayPastColor = Color.parseColor("#FFD4D4D4")
|
||||||
private var rewardTextColor = Color.parseColor("#FF9800")
|
private var rewardTextColor = Color.parseColor("#FF9800")
|
||||||
|
private var rewardTextSignedColor = Color.parseColor("#999999")
|
||||||
private var todayHighlightColor = Color.parseColor("#4CAF50")
|
private var todayHighlightColor = Color.parseColor("#4CAF50")
|
||||||
private var bgRectColor = Color.parseColor("#ffffedd7")
|
private var bgRectColor = Color.parseColor("#ffffedd7")
|
||||||
|
|
||||||
|
|
@ -59,7 +60,7 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setupAttributes(attrs)
|
setupAttributes(attrs)
|
||||||
setupDefaultData()
|
initLoadDatas()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupAttributes(attrs: AttributeSet?) {
|
private fun setupAttributes(attrs: AttributeSet?) {
|
||||||
|
|
@ -80,9 +81,8 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
typedArray.recycle()
|
typedArray.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDefaultData() {
|
private fun initLoadDatas() {
|
||||||
currentDay = getCurrentDayOfWeek()
|
|
||||||
dayStatusList = generateWeekData(currentDay)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||||
|
|
@ -97,10 +97,12 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
|
|
||||||
override fun onDraw(canvas: Canvas) {
|
override fun onDraw(canvas: Canvas) {
|
||||||
super.onDraw(canvas)
|
super.onDraw(canvas)
|
||||||
if (dayStatusList.isEmpty()) return
|
|
||||||
|
val dayStateList = TaskManager.instance().getDayStateList()
|
||||||
|
if (dayStateList.isEmpty()) return
|
||||||
|
|
||||||
val totalWidth = measuredWidth.toFloat()
|
val totalWidth = measuredWidth.toFloat()
|
||||||
val totalItemCount = dayStatusList.size
|
val totalItemCount = dayStateList.size
|
||||||
val itemHoriGapPixel = (totalWidth - 2 * circleRadius - 2 * HoriMagin) / (totalItemCount - 1)
|
val itemHoriGapPixel = (totalWidth - 2 * circleRadius - 2 * HoriMagin) / (totalItemCount - 1)
|
||||||
|
|
||||||
// bg rect
|
// bg rect
|
||||||
|
|
@ -108,27 +110,27 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
canvas.drawRect(circleRadius + HoriMagin, bgTop,
|
canvas.drawRect(circleRadius + HoriMagin, bgTop,
|
||||||
totalWidth - circleRadius - HoriMagin, bgTop + bgRectHeight, bgPaint)
|
totalWidth - circleRadius - HoriMagin, bgTop + bgRectHeight, bgPaint)
|
||||||
|
|
||||||
dayStatusList.forEachIndexed { index, dayStatus ->
|
dayStateList.forEachIndexed { index, dayStatus ->
|
||||||
val centerX = HoriMagin + circleRadius + itemHoriGapPixel * index
|
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? {
|
fun getBitmap(resId: Int): Bitmap? {
|
||||||
return try {
|
return try {
|
||||||
|
|
@ -141,52 +143,5 @@ class WeekStatusView @JvmOverloads constructor(
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// --------------------- public ---------------------
|
|
||||||
fun updateData(data: List<DayStatus>) {
|
|
||||||
dayStatusList = data
|
|
||||||
invalidate()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateForDate(targetDate: Date) {
|
|
||||||
val targetDay = getDayOfWeekFromDate(targetDate)
|
|
||||||
dayStatusList = generateWeekData(targetDay)
|
|
||||||
invalidate()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun refreshToCurrentDate() {
|
|
||||||
updateForDate(Date())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getCurrentData(): List<DayStatus> = dayStatusList
|
|
||||||
|
|
||||||
fun getCurrentDay(): Int = currentDay
|
|
||||||
|
|
||||||
|
|
||||||
private fun generateWeekData(targetDay: Int): List<DayStatus> {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -239,6 +239,16 @@ class TaskManager private constructor() {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun getDayStateList(): List<DailySignDayInfoBean> {
|
||||||
|
return mDailySignData.signStateList
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getRewardNumOfDailySign(dayIndex: Int) : Int {
|
||||||
|
return getDailyCheckInTask()?.reward_details?.get(dayIndex)?.value ?: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue