1:添加签到功能,在首页展示,跟在青少年模式下,

2:在任务页面展示签到功能
This commit is contained in:
2025-12-12 15:28:15 +08:00
parent 6825009aba
commit f646493800
17 changed files with 840 additions and 0 deletions

View File

@@ -0,0 +1,241 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import com.blankj.utilcode.util.ScreenUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogSignBinding
import com.xscm.moduleutil.bean.SignInData
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.utils.ImageLoader
import com.xscm.moduleutil.widget.dialog.BaseDialog
import io.reactivex.disposables.Disposable
/**
* 项目名称:羽声语音
* 时间2025/12/9 18:21
* 用途:签到
*/
class SignInDialog(context: Context) : BaseDialog<DialogSignBinding>(context) {
var signInDataLists: List<SignInData>? = ArrayList<SignInData>()
private var onCloseCallback: (() -> Unit)? = null
fun setOnCloseListener(callback: () -> Unit) = apply {
onCloseCallback = callback
}
init {
// 设置对话框从底部弹出
window?.setGravity(Gravity.CENTER)
// 设置对话框的宽度为屏幕宽度
window?.setLayout(
(ScreenUtils.getScreenWidth() * 315f / 375).toInt(),
ViewGroup.LayoutParams.WRAP_CONTENT
)
// 添加动画效果
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
setCancelable(false)
setCanceledOnTouchOutside(false)
}
override fun getLayoutId(): Int {
return R.layout.dialog_sign
}
override fun initView() {
mBinding.ivClose.setOnClickListener {
onCloseCallback?.invoke()
dismiss()
}
mBinding.btnSign.setOnClickListener {
RetrofitClient.getInstance().dailyTasksSign(object : BaseObserver<String>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
var signInSuccessDialog=SignInSuccessDialog(context)
signInSuccessDialog.viewData(signInData)
signInSuccessDialog.setOnCloseListener {
onCloseCallback?.invoke()
}
signInSuccessDialog.show()
dismiss()
}
})
}
}
override fun initData() {
RetrofitClient.getInstance().signIn(object : BaseObserver<List<SignInData>>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<SignInData>) {
signInDataLists = t
for (i in signInDataLists!!) {
setUpView(i)
}
}
})
}
var signInData = SignInData()
fun setUpView(signInData: SignInData) {
if (signInData.is_today == 1) {
this.signInData = signInData
if (signInData.sign_in_status == 1) {
mBinding.btnSign.text = "已签到"
mBinding.btnSign.isEnabled = false
mBinding.btnSign.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r53_f3f3f3)
}
}
if (signInData.day == 1) {
mBinding.day1.tvDay.text = signInData.day.toString()
mBinding.day1.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day1.ivCollected.visibility = View.VISIBLE
mBinding.day1.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day1.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day1.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day1.ivSign
)
}
} else if (signInData.day == 2) {
mBinding.day2.tvDay.text = signInData.day.toString()
mBinding.day2.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day2.ivCollected.visibility = View.VISIBLE
mBinding.day2.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day2.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day2.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day2.ivSign
)
}
} else if (signInData.day == 3) {
mBinding.day3.tvDay.text = signInData.day.toString()
mBinding.day3.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day3.ivCollected.visibility = View.VISIBLE
mBinding.day3.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day3.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day3.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day3.ivSign
)
}
} else if (signInData.day == 4) {
mBinding.day4.tvDay.text = signInData.day.toString()
mBinding.day4.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day4.ivCollected.visibility = View.VISIBLE
mBinding.day4.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day4.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day4.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day4.ivSign
)
}
} else if (signInData.day == 5) {
mBinding.day5.tvDay.text = signInData.day.toString()
mBinding.day5.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day5.ivCollected.visibility = View.VISIBLE
mBinding.day5.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day5.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day5.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day5.ivSign
)
}
} else if (signInData.day == 6) {
mBinding.day6.tvDay.text = signInData.day.toString()
mBinding.day6.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day6.ivCollected.visibility = View.VISIBLE
mBinding.day6.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day6.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day6.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day6.ivSign
)
}
} else if (signInData.day == 7) {
mBinding.day7.tvDay.text = signInData.day.toString()
mBinding.day7.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num
if (signInData.sign_in_status == 1) {
mBinding.day7.ivCollected.visibility = View.VISIBLE
mBinding.day7.root.setBackgroundResource(R.drawable.select_item_click)
ImageLoader.loadImage(
context,
mBinding.day7.ivSign,
signInData.base_image,
0.4f
)
} else {
mBinding.day7.ivCollected.visibility = View.GONE
com.xscm.moduleutil.utils.ImageUtils.loadHead(
signInData.base_image,
mBinding.day7.ivSign
)
}
}
}
}

View File

@@ -0,0 +1,57 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.ViewGroup
import com.blankj.utilcode.util.ScreenUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogSignSuccesBinding
import com.xscm.moduleutil.bean.SignInData
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.dialog.BaseDialog
/**
* 项目名称:羽声语音
* 时间2025/12/12 9:37
* 用途:签到成功后展示页面
*/
class SignInSuccessDialog(context: Context) : BaseDialog<DialogSignSuccesBinding>(context) {
private var onCloseCallback: (() -> Unit)? = null
fun setOnCloseListener(callback: () -> Unit) = apply {
onCloseCallback = callback
}
init {
// 设置对话框从底部弹出
window?.setGravity(Gravity.CENTER)
// 设置对话框的宽度为屏幕宽度
window?.setLayout(
(ScreenUtils.getScreenWidth() * 315f / 375).toInt(),
ViewGroup.LayoutParams.WRAP_CONTENT
)
// 添加动画效果
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
setCancelable(false)
setCanceledOnTouchOutside(false)
}
override fun getLayoutId(): Int {
return R.layout.dialog_sign_succes
}
override fun initView() {
mBinding.btnSign.setOnClickListener {
onCloseCallback?.invoke()
dismiss()
}
}
override fun initData() {
}
fun viewData(signInData: SignInData) {
ImageUtils.loadHead(signInData.base_image, mBinding.imV)
mBinding.tvSignPrice.text ="签到成功 "+ signInData.gift_name+""+signInData.num
}
}

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/dp_5"
android:background="@drawable/selector_sign_bg"
>
<TextView
android:id="@+id/tv_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_4"
android:layout_marginTop="@dimen/dp_4"
android:fontFamily="@font/youshebiaotihei"
android:gravity="center"
android:textColor="#FFC273"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="7" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DAY"
app:layout_constraintStart_toEndOf="@+id/tv_day"
app:layout_constraintTop_toTopOf="@id/tv_day"
android:textColor="#FFC273"
android:layout_marginStart="@dimen/dp_4"
android:layout_marginTop="@dimen/dp_4"
android:textSize="@dimen/sp_12"
android:gravity="center"
/>
<ImageView
android:layout_width="@dimen/dp_33"
android:layout_height="@dimen/dp_33"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="@dimen/dp_19"
app:layout_constraintEnd_toEndOf="parent"
tools:src="@mipmap/ic_launcher"
android:scaleType="fitCenter"
android:id="@+id/iv_sign" />
<ImageView
android:layout_width="@dimen/dp_33"
android:layout_height="@dimen/dp_33"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="@dimen/dp_19"
app:layout_constraintEnd_toEndOf="parent"
android:src="@mipmap/ic_collected"
android:scaleType="fitCenter"
android:id="@+id/iv_collected"
android:visibility="gone"
tools:visibility="visible"/>
<TextView
android:id="@+id/tv_sigin_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:gravity="center"
tools:text="签到礼物名称"
app:layout_constraintTop_toBottomOf="@+id/iv_sign"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_9" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:paddingBottom="@dimen/dp_5"
android:background="@drawable/selector_sign_bg">
<TextView
android:id="@+id/tv_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_4"
android:layout_marginTop="@dimen/dp_4"
android:fontFamily="@font/youshebiaotihei"
android:gravity="center"
android:textColor="#FFC273"
android:textSize="@dimen/sp_32"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="7" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DAY"
app:layout_constraintStart_toEndOf="@+id/tv_day"
app:layout_constraintTop_toTopOf="@id/tv_day"
android:textColor="#FFC273"
android:layout_marginStart="@dimen/dp_4"
android:layout_marginTop="@dimen/dp_4"
android:textSize="@dimen/sp_12"
android:gravity="center"
/>
<ImageView
android:layout_width="@dimen/dp_33"
android:layout_height="@dimen/dp_33"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="@dimen/dp_19"
app:layout_constraintEnd_toEndOf="parent"
tools:src="@mipmap/ic_launcher"
android:scaleType="fitCenter"
android:id="@+id/iv_sign" />
<ImageView
android:layout_width="@dimen/dp_33"
android:layout_height="@dimen/dp_33"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="@dimen/dp_19"
app:layout_constraintEnd_toEndOf="parent"
tools:src="@mipmap/ic_collected"
android:scaleType="fitCenter"
android:id="@+id/iv_collected"
android:visibility="gone"
tools:visibility="visible"/>
<TextView
android:id="@+id/tv_sigin_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:gravity="center"
tools:text="签到礼物名称"
app:layout_constraintTop_toBottomOf="@+id/iv_sign"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_9" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/im_v"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/shape_dialog_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/rv_sign"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="0dp"-->
<!-- android:layout_marginHorizontal="@dimen/dp_22"-->
<!-- app:layout_constraintTop_toTopOf="@id/im_v"-->
<!-- app:layout_constraintBottom_toBottomOf="@id/im_v"-->
<!-- tool:listitem="@layout/day_sgin"-->
<!-- tool:itemCount="4"-->
<!-- />-->
<LinearLayout
android:id="@+id/ll1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_22"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@id/im_v"
app:layout_constraintStart_toStartOf="@id/im_v"
app:layout_constraintTop_toTopOf="@id/im_v"
app:layout_constraintBottom_toBottomOf="@id/im_v">
<include
android:id="@+id/day1"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:layout_weight="1" />
<include
android:id="@+id/day2"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:layout_weight="1" />
<include
android:id="@+id/day3"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:layout_weight="1" />
<include
android:id="@+id/day4"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_88"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="@dimen/dp_22"
android:layout_marginTop="12.5dp"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/ll1">
<include
android:id="@+id/day5"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:layout_weight="1" />
<include
android:id="@+id/day6"
layout="@layout/day_sgin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:layout_weight="1" />
<include
android:id="@+id/day7"
layout="@layout/day_sgin2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
<TextView
android:id="@+id/btn_sign"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="@dimen/dp_37"
android:layout_marginTop="15dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_r99_e7fe67_90ff86_5cfbbd"
android:gravity="center"
android:paddingVertical="@dimen/dp_15"
android:text="立即签到"
android:textColor="@color/black"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/im_v"
app:layout_constraintEnd_toEndOf="@id/im_v"
app:layout_constraintStart_toStartOf="@id/im_v" />
<ImageView
android:id="@+id/iv_close"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_10"
android:src="@mipmap/index_close_youth"
android:scaleType="fitCenter"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/im_v" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_r16_deff85_cfffdc"
android:layout_marginHorizontal="10dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_sign_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="签到成功 金币+10"
android:layout_gravity="center_horizontal"
android:textSize="15sp"
android:layout_marginTop="190dp"
android:textColor="@color/colorPrimary"
/>
<TextView
android:id="@+id/btn_sign"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="@dimen/dp_37"
android:layout_marginTop="15dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_r99_e7fe67_90ff86_5cfbbd"
android:gravity="center"
android:paddingVertical="@dimen/dp_15"
android:text="开心收下"
android:textColor="@color/black"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/im_v"
app:layout_constraintEnd_toEndOf="@id/im_v"
app:layout_constraintStart_toStartOf="@id/im_v" />
</LinearLayout>
<ImageView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_percent="0.4"
app:layout_constraintWidth_percent="0.3"
android:layout_marginBottom="@dimen/dp_90"
android:id="@+id/im_v"
android:src="@mipmap/ic_launcher"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB