状态变化跟随

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 package com.gamedog.vididin.main.fragments.task
import android.content.Context import android.content.Context
import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.databinding.DialogDailySignBinding import com.gamedog.vididin.databinding.DialogDailySignBinding
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.TaskManager import com.gamedog.vididin.manager.TaskManager
import com.gamedog.vididin.widget.DailySignItemView import com.gamedog.vididin.widget.DailySignItemView
@ -13,7 +15,6 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
private var mSelectedDayIndex: Int = 0 private var mSelectedDayIndex: Int = 0
private var mRewardDetailList: List<RewardDetail>? = emptyList() private var mRewardDetailList: List<RewardDetail>? = emptyList()
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf() private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
private var mSignStateList: MutableList<DailySignItemView> = mutableListOf()
init { init {
@ -71,9 +72,11 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mRewardDetailList?.let { mRewardDetailList?.let {
mSignItemViewList.forEachIndexed { index, itemView-> mSignItemViewList.forEachIndexed { index, itemView->
itemView.setData(mRewardDetailList!![index], { isSelected -> itemView.setData(mRewardDetailList!![index],
handleItemSelectStateChanged(index, isSelected) TaskManager.instance().getDailySignStateBean(index),
}) { isSelected ->
handleItemSelectStateChanged(index, isSelected)
})
} }
} }
} }
@ -83,6 +86,8 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn() mCurDayIndex = TaskManager.instance().getCurDayIndexOfDailyCheckIn()
mSelectedDayIndex = mCurDayIndex mSelectedDayIndex = mCurDayIndex
mSignItemViewList[mCurDayIndex].setSelectState(true) mSignItemViewList[mCurDayIndex].setSelectState(true)
updateBottomButtons(mSelectedDayIndex)
} }
private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) { private fun handleItemSelectStateChanged(itemIndex: Int, selected: Boolean) {
@ -92,6 +97,37 @@ class DailySignDialog(context: Context) : BindingDialog<DialogDailySignBinding>(
itemView.setSelectState(false) 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 return dayIndexOfPeriod
} }
fun getDailySignStateBean(dayIndex: Int): DailySignDayInfoBean {
return mDailySignData.signStateList[dayIndex]
}
fun executeDailySign(dayIndex: Int, rewardNum: Int) : Boolean { fun executeDailySign(dayIndex: Int, rewardNum: Int) : Boolean {
val daySignState = mDailySignData.signStateList[dayIndex] val daySignState = mDailySignData.signStateList[dayIndex]
if ((dayIndex == mCurDayIndexDailySign && daySignState.signState == DailySignBean.SIGN_STATE_ENABLE) 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.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.view.isVisible
import com.ama.core.architecture.util.ResUtil import com.ama.core.architecture.util.ResUtil
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.gamedog.vididin.R import com.gamedog.vididin.R
import com.gamedog.vididin.databinding.DailySignItemBinding import com.gamedog.vididin.databinding.DailySignItemBinding
import com.gamedog.vididin.main.fragments.task.RewardDetail import com.gamedog.vididin.main.fragments.task.RewardDetail
import com.gamedog.vididin.manager.DailySignBean
import com.gamedog.vididin.manager.DailySignDayInfoBean
import kotlin.run import kotlin.run
class DailySignItemView @JvmOverloads constructor( class DailySignItemView @JvmOverloads constructor(
@ -18,7 +21,8 @@ class DailySignItemView @JvmOverloads constructor(
defStyleAttr: Int = 0 defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) { ) : 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 mBinding: DailySignItemBinding
private var mIsSelected = false private var mIsSelected = false
private var mSelectStateCallback: ((isSelected: Boolean)->Unit)? = null private var mSelectStateCallback: ((isSelected: Boolean)->Unit)? = null
@ -42,11 +46,31 @@ class DailySignItemView @JvmOverloads constructor(
fun setData(data: RewardDetail, selectStateCallback: (isSelected: Boolean)->Unit) { fun setData(data: RewardDetail, stateData: DailySignDayInfoBean, selectStateCallback: (isSelected: Boolean)->Unit) {
mData = data mConfigData = data
mStateData = stateData
mSelectStateCallback = selectStateCallback mSelectStateCallback = selectStateCallback
mBinding.tvGoldNum.text = "" + mData.value mBinding.tvGoldNum.text = "" + mConfigData.value
mBinding.tvDayNum.text = context.getString(R.string.day) + " "+ mData.day 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() { fun setLargeWidthMode() {
@ -63,6 +87,9 @@ class DailySignItemView @JvmOverloads constructor(
} }
} }
fun getStateBean(): DailySignDayInfoBean {
return mStateData
}
} }

View File

@ -48,14 +48,31 @@
</RelativeLayout> </RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_day_num" <FrameLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="1dp" android:layout_marginTop="1dp">
android:textSize="12sp" <androidx.appcompat.widget.AppCompatTextView
android:textColor="@color/gray3" android:id="@+id/tv_day_num"
android:text="Dia" 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> </LinearLayout>

View File

@ -27,11 +27,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center" android:gravity="center_horizontal"
android:layout_marginHorizontal="30dp" android:layout_marginHorizontal="30dp"
android:clipChildren="false" android:clipChildren="false"
android:layout_marginTop="45dp"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
> >
@ -143,76 +143,151 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:clipChildren="false" android:clipChildren="false" >
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView <!--普通签到两个按钮场景-->
android:id="@+id/but_sign" <LinearLayout
android:layout_width="0dp" android:id="@+id/action_normal_two_buts"
android:layout_height="42dp" android:layout_width="match_parent"
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"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="10dp" android:clipChildren="false"
android:layout_weight="1"> android:orientation="horizontal"
android:gravity="center"
>
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent" android:id="@+id/but_sign"
android:layout_height="45dp" android:layout_width="0dp"
android:layout_gravity="center_vertical" android:layout_height="42dp"
android:background="@mipmap/zero_bg_but"/> 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:layout_height="wrap_content"
android:orientation="horizontal" android:layout_marginStart="10dp"
android:layout_marginBottom="2dp" android:layout_weight="1">
android:gravity="center_vertical"
android:layout_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"/>
<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 <androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_marginLeft="8dp"
android:src="@mipmap/task_video"/> 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 <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center_horizontal"
android:textSize="14sp" android:layout_marginLeft="15dp"
android:layout_marginLeft="5dp" android:textSize="21sp"
android:textColor="@color/white" android:textColor="@color/yellow_00"
android:text="@string/assistir" android:text="+100"
android:gravity="center" 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_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="8dp" android:layout_weight="1"
android:layout_gravity="top|right" android:textSize="18sp"
android:layout_marginTop="-20dp" android:textColor="@color/white"
android:layout_marginRight="3dp" android:text="@string/complement_hint"
android:src="@mipmap/icon_x2"/> android:gravity="center"
android:layout_gravity="center"
android:drawableStart="@mipmap/task_video"
android:drawablePadding="5dp"
/>
</FrameLayout> </FrameLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout> </LinearLayout>

View File

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