状态变化跟随

This commit is contained in:
renhaoting 2025-11-26 16:40:28 +08:00
parent 4843f71574
commit 100b5f7d61
6 changed files with 227 additions and 67 deletions

View File

@ -1,9 +1,11 @@
package com.gamedog.vididin.main.fragments.task
import android.content.Context
import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignBinding
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.widget.DailySignItemView
@ -13,7 +15,6 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
private var mSelectedDayIndex: Int = 0
private var mRewardDetailList: List<RewardDetail>? = emptyList()
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
private var mSignStateList: MutableList<DailySignItemView> = mutableListOf()
init {
@ -71,9 +72,11 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mRewardDetailList?.let {
mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mRewardDetailList!![index], { isSelected ->
handleItemSelectStateChanged(index, isSelected)
})
itemView.setData(mRewardDetailList!![index],
TaskManager.instance().getDailySignStateBean(index),
{ isSelected ->
handleItemSelectStateChanged(index, isSelected)
})
}
}
}
@ -83,6 +86,8 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mSelectedDayIndex = mCurDayIndex
mSignItemViewList[mCurDayIndex].setSelectState(true)
updateBottomButtons(mSelectedDayIndex)
}
private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {
@ -92,6 +97,37 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
itemView.setSelectState(false)
}
}
updateBottomButtons(mSelectedDayIndex)
}
private fun updateBottomButtons(selectedIndex: Int) {
val itemView = mSignItemViewList.get(selectedIndex)
val stateBean = itemView.getStateBean()
when (stateBean.signState) {
DailySignBean.SIGN_STATE_ENABLE -> {
mBinding.actionNormalTwoButs.isVisible = true
mBinding.actionComplement.isVisible = false
mBinding.actionWatchAd.isVisible = false
}
DailySignBean.SIGN_STATE_DISABLE -> {
mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionComplement.isVisible = false
mBinding.actionWatchAd.isVisible = false
}
DailySignBean.SIGN_STATE_DONE -> {
mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionComplement.isVisible = false
mBinding.actionWatchAd.isVisible = true
}
DailySignBean.SIGN_STATE_FORGOT -> {
mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionComplement.isVisible = true
mBinding.actionWatchAd.isVisible = false
}
}
}

View File

@ -157,6 +157,10 @@ class TaskManager private constructor() {
return dayIndexOfPeriod
}
fun getDailySignStateBean(dayIndex: Int): DailySignDayInfoBean {
return mDailySignData.signStateList[dayIndex]
}
fun executeDailySign(dayIndex: Int, rewardNum: Int) : Boolean {
val daySignState = mDailySignData.signStateList[dayIndex]
if ((dayIndex == mCurDayIndexDailySign && daySignState.signState == DailySignBean.SIGN_STATE_ENABLE)

View File

@ -5,11 +5,14 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.core.view.isVisible
import com.ama.core.architecture.util.ResUtil
import com.ama.core.architecture.util.setOnClickBatch
import com.gamedog.vididin.R
import com.gamedog.vididin.databinding.DailySignItemBinding
import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.DailySignDayInfoBean
import kotlin.run
class DailySignItemView @JvmOverloads constructor(
@ -18,7 +21,8 @@ class DailySignItemView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
private lateinit var mData: RewardDetail
private lateinit var mConfigData: RewardDetail
private lateinit var mStateData: DailySignDayInfoBean
private var mBinding: DailySignItemBinding
private var mIsSelected = false
private var mSelectStateCallback: ((isSelected: Boolean)->Unit)? = null
@ -42,11 +46,31 @@ class DailySignItemView @JvmOverloads constructor(
fun setData(data: RewardDetail, selectStateCallback: (isSelected: Boolean)->Unit) {
mData = data
fun setData(data: RewardDetail, stateData: DailySignDayInfoBean, selectStateCallback: (isSelected: Boolean)->Unit) {
mConfigData = data
mStateData = stateData
mSelectStateCallback = selectStateCallback
mBinding.tvGoldNum.text = "" + mData.value
mBinding.tvDayNum.text = context.getString(R.string.day) + " "+ mData.day
mBinding.tvGoldNum.text = "" + mConfigData.value
mBinding.tvDayNum.text = context.getString(R.string.day) + " "+ mConfigData.day
when(mStateData.signState) {
DailySignBean.SIGN_STATE_ENABLE -> {
mBinding.ivDone.isVisible = false
}
DailySignBean.SIGN_STATE_DISABLE -> {
mBinding.ivDone.isVisible = false
}
DailySignBean.SIGN_STATE_DONE -> {
mBinding.ivDone.isVisible = true
mBinding.tvDayNum.isVisible = false
}
DailySignBean.SIGN_STATE_FORGOT -> {
mBinding.ivDone.isVisible = false
}
}
}
fun setLargeWidthMode() {
@ -63,6 +87,9 @@ class DailySignItemView @JvmOverloads constructor(
}
}
fun getStateBean(): DailySignDayInfoBean {
return mStateData
}
}

View File

@ -48,14 +48,31 @@
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_day_num"
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:textSize="12sp"
android:textColor="@color/gray3"
android:text="Dia"
/>
android:layout_marginTop="1dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_day_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="@color/gray3"
android:text="Dia"
android:layout_gravity="center"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:tint="@color/green_39"
android:src="@mipmap/icon_check_mark"
android:layout_gravity="center"
/>
</FrameLayout>
</LinearLayout>

View File

@ -27,11 +27,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:gravity="center_horizontal"
android:layout_marginHorizontal="30dp"
android:clipChildren="false"
android:layout_marginTop="45dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
@ -143,76 +143,151 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:clipChildren="false"
android:orientation="horizontal">
android:clipChildren="false" >
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/but_sign"
android:layout_width="0dp"
android:layout_height="42dp"
android:layout_weight="1"
android:background="@drawable/bg_sign_left_but"
android:textSize="14sp"
android:textColor="@color/red_2f"
android:text="@string/resgatar"
android:gravity="center"
/>
<FrameLayout
android:id="@+id/but_watch_ad"
android:layout_width="0dp"
<!--普通签到两个按钮场景-->
<LinearLayout
android:id="@+id/action_normal_two_buts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_weight="1">
android:clipChildren="false"
android:orientation="horizontal"
android:gravity="center"
>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_gravity="center_vertical"
android:background="@mipmap/zero_bg_but"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/but_sign"
android:layout_width="0dp"
android:layout_height="42dp"
android:layout_weight="1"
android:background="@drawable/bg_sign_left_but"
android:textSize="14sp"
android:textColor="@color/red_2f"
android:text="@string/resgatar"
android:gravity="center"
/>
<LinearLayout
android:layout_width="wrap_content"
<FrameLayout
android:id="@+id/but_watch_ad"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="2dp"
android:gravity="center_vertical"
android:layout_gravity="center">
android:layout_marginStart="10dp"
android:layout_weight="1">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_gravity="center_vertical"
android:background="@mipmap/zero_bg_but"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="2dp"
android:gravity="center_vertical"
android:layout_gravity="center">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/task_video"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:layout_marginLeft="5dp"
android:textColor="@color/white"
android:text="@string/assistir"
android:gravity="center"
/>
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/task_video"/>
android:layout_marginLeft="8dp"
android:layout_gravity="top|right"
android:layout_marginTop="-20dp"
android:layout_marginRight="3dp"
android:src="@mipmap/icon_x2"/>
</FrameLayout>
</LinearLayout>
<!--已完成普通签到 待看广告)-->
<FrameLayout
android:id="@+id/action_watch_ad"
android:layout_width="wrap_content"
android:layout_height="52dp"
android:layout_gravity="center"
android:paddingHorizontal="30dp"
android:visibility="visible"
android:background="@mipmap/icon_action_but_bg">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center_vertical" >
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="@color/white"
android:text="@string/assistir"
android:drawableLeft="@mipmap/task_video"
android:drawablePadding="5dp"
/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="14sp"
android:layout_marginLeft="5dp"
android:textColor="@color/white"
android:text="@string/assistir"
android:gravity="center"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="15dp"
android:textSize="21sp"
android:textColor="@color/yellow_00"
android:text="+100"
android:drawableStart="@mipmap/task_gold"
android:drawablePadding="5dp"
/>
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
</LinearLayout>
</FrameLayout>
<!--补签-->
<FrameLayout
android:id="@+id/action_complement"
android:layout_width="wrap_content"
android:layout_height="52dp"
android:layout_gravity="center"
android:paddingHorizontal="30dp"
android:background="@mipmap/icon_action_but_bg"
android:visibility="gone">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_gravity="top|right"
android:layout_marginTop="-20dp"
android:layout_marginRight="3dp"
android:src="@mipmap/icon_x2"/>
android:layout_weight="1"
android:textSize="18sp"
android:textColor="@color/white"
android:text="@string/complement_hint"
android:gravity="center"
android:layout_gravity="center"
android:drawableStart="@mipmap/task_video"
android:drawablePadding="5dp"
/>
</FrameLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View File

@ -64,6 +64,7 @@
<string name="version">Version\n</string>
<string name="title_cash_record">Dinheiro</string>
<string name="sign_success_desc">Você ganhou uma recompensa!</string>
<string name="complement_hint">Recuperar 1 dia de login</string>
</resources>