夺宝精灵:精灵试炼

This commit is contained in:
huangjian
2023-02-27 17:38:13 +08:00
parent 96e3aa67af
commit 73ec5a77b1
24 changed files with 739 additions and 41 deletions

View File

@@ -1,9 +1,13 @@
package com.mango.moshen.treasurefairy
import android.util.SparseArray
import android.util.SparseIntArray
import androidx.core.util.forEach
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.mango.core.bean.response.ListResult
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.manager.AvRoomDataManager
import com.mango.core.treasurefairy.*
import com.mango.core.utils.net.ServerException
import com.mango.core.utils.toast
@@ -48,6 +52,14 @@ class FairyViewModel : BaseViewModel() {
private val _sendFairyRecordLiveData = MutableLiveData<ListResult<SendFairyInfo>>()
val sendFairyRecordLiveData: LiveData<ListResult<SendFairyInfo>> = _sendFairyRecordLiveData
private val _compoundFairyInfosLiveData = MutableLiveData<SparseArray<FairyInfo>>()
val compoundFairyInfosLiveData: LiveData<SparseArray<FairyInfo>> = _compoundFairyInfosLiveData
private val _testResultLiveData = MutableLiveData<Event<FairyInfo>>()
val testResultLiveData: LiveData<Event<FairyInfo>> = _testResultLiveData
private val _testRecordLiveData = MutableLiveData<ListResult<TestFairyRecordInfo>>()
val testRecordLiveData: LiveData<ListResult<TestFairyRecordInfo>> = _testRecordLiveData
init {
initPrizeInfoList()
@@ -213,4 +225,121 @@ class FairyViewModel : BaseViewModel() {
)
}
fun cleanTestParam() {
_compoundFairyInfosLiveData.value = null
_myFairyInfoLiveData.value?.lowElves?.forEach {
it.selectedNum = 0
}
_myFairyInfoLiveData.value?.middleElves?.forEach {
it.selectedNum = 0
}
_myFairyInfoLiveData.value = _myFairyInfoLiveData.value
}
fun addTestFairy(fairyInfo: FairyInfo) {
val array = _compoundFairyInfosLiveData.value ?: SparseArray()
if (array.size() >= 3) {
"数量足够了,快去试炼吧!".toast()
} else {
if (fairyInfo.elfNum == 0) {
"精灵数量不足".toast()
return
}
array.put(nextIndex(array), fairyInfo)
var selectedNum = 0
array.forEach { _, value ->
if (value.elfId == fairyInfo.elfId) {
selectedNum++
}
}
if (selectedNum > fairyInfo.elfNum) {
"精灵数量不足".toast()
return
}
fairyInfo.selectedNum = selectedNum
_compoundFairyInfosLiveData.value = array
}
}
fun minusTestFairy(index: Int) {
val array = _compoundFairyInfosLiveData.value ?: SparseArray()
val fairyInfo = array.get(index)
if (fairyInfo != null) {
array.remove(index)
var selectedNum = 0
array.forEach { _, value ->
if (value.elfId == fairyInfo.elfId) {
selectedNum++
}
}
fairyInfo.selectedNum = selectedNum
_compoundFairyInfosLiveData.value = array
}
}
fun oneKeyAdd(fairyInfos: List<FairyInfo>) {
val compoundFairyInfos = _compoundFairyInfosLiveData.value ?: SparseArray()
var needNum = 3 - compoundFairyInfos.size()
fairyInfos.forEach {
while (it.elfNum - it.selectedNum > 0 && needNum > 0) {
it.selectedNum++
needNum--
compoundFairyInfos.put(nextIndex(compoundFairyInfos), it)
}
}
_compoundFairyInfosLiveData.value = compoundFairyInfos
}
private fun nextIndex(fairyInfos: SparseArray<FairyInfo>): Int {
return when {
fairyInfos.get(0) == null -> {
0
}
fairyInfos.get(1) == null -> {
1
}
else -> {
2
}
}
}
fun testFairy(level: Int) {
val fairyInfos = _compoundFairyInfosLiveData.value ?: SparseArray()
if (fairyInfos.size() != 3) {
"精灵数量不足".toast()
return
}
safeLaunch {
val fairyTestParam = FairyTestParam()
fairyInfos.forEach { _, value ->
fairyTestParam.expendList.add(Compound(value.elfId, 1))
}
fairyTestParam.level = level
val result = TreasureFairyModel.testFairy(fairyTestParam)
_testResultLiveData.value = result?.let { Event(it) }
_compoundFairyInfosLiveData.value = null
getMyFairyInfo()
}
}
fun getTestFairyRecordList(
page: Int,
pageSize: Int
) {
safeLaunch(
onError = {
_testRecordLiveData.value = ListResult.failed(page)
},
block = {
val result = TreasureFairyModel.getTestFairyRecordList(page, pageSize)
_testRecordLiveData.value = ListResult.success(result, page)
}
)
}
}

View File

@@ -0,0 +1,27 @@
package com.mango.moshen.treasurefairy
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.treasurefairy.FairyInfo
import com.mango.core.treasurefairy.SendFairyInfo
import com.mango.moshen.R
import com.mango.moshen.ui.utils.load
import java.text.SimpleDateFormat
import java.util.*
class TestFairyAdapter :
BaseQuickAdapter<FairyInfo, BaseViewHolder>(R.layout.treasure_fairy_item_test_fairy) {
override fun convert(helper: BaseViewHolder, item: FairyInfo) {
helper.getView<ImageView>(R.id.iv_fairy_icon).load(item.elfPicUrl)
helper.setText(R.id.tv_fairy_num, "${item.selectedNum}/${item.elfNum}")
helper.setText(R.id.tv_fairy_name, item.elfName)
helper.setBackgroundRes(
R.id.ll_root,
if (item.selectedNum > 0) R.drawable.treasure_fairy_bg_test_fairy_item_select else 0
)
}
}

View File

@@ -6,14 +6,10 @@ import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.viewpager.widget.ViewPager
import com.mango.core.room.game.GameInfo
import com.mango.moshen.R
import com.mango.moshen.avroom.adapter.RoomVPAdapter
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogMyFairyBinding
import com.mango.moshen.databinding.TreasureFairyDialogTestFairyBinding
import com.mango.moshen.home.adapter.FragmentViewPagerAdapter
import com.mango.moshen.ui.utils.RVDelegate
class TestFairyDialog : BaseDialog<TreasureFairyDialogTestFairyBinding>() {
@@ -36,6 +32,9 @@ class TestFairyDialog : BaseDialog<TreasureFairyDialogTestFairyBinding>() {
binding.ivBack.setOnClickListener {
dismissAllowingStateLoss()
}
binding.tvRecord.setOnClickListener {
TestFairyRecordDialog.newInstance().show(context)
}
binding.rg.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
R.id.rb_epic -> binding.viewPager.currentItem = 0
@@ -48,17 +47,19 @@ class TestFairyDialog : BaseDialog<TreasureFairyDialogTestFairyBinding>() {
0 -> binding.rg.check(R.id.rb_epic)
1 -> binding.rg.check(R.id.rb_legend)
}
viewModel.cleanTestParam()
}
})
binding.viewPager.adapter = RoomVPAdapter(
childFragmentManager,
listOf(
TestFairyFragment.newInstance(MyFairyItemView.EPIC),
TestFairyFragment.newInstance(MyFairyItemView.LEGEND)
TestFairyFragment.newInstance(MyFairyItemView.BASE),
TestFairyFragment.newInstance(MyFairyItemView.EPIC)
)
)
viewModel.getMyFairyInfo()
viewModel.cleanTestParam()
}
}

View File

@@ -5,8 +5,13 @@ import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.room.game.GameInfo
import com.mango.core.treasurefairy.FairyInfo
import com.mango.core.treasurefairy.SendFairyInfo
import com.mango.core.utils.toast
import com.mango.moshen.R
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.base.BaseFragment
@@ -15,6 +20,7 @@ import com.mango.moshen.databinding.TreasureFairyDialogMyFairyBinding
import com.mango.moshen.databinding.TreasureFairyFragmentMyFairyBinding
import com.mango.moshen.databinding.TreasureFairyFragmentTestFairyBinding
import com.mango.moshen.ui.utils.RVDelegate
import com.mango.moshen.ui.utils.load
class TestFairyFragment : BaseViewBindingFragment<TreasureFairyFragmentTestFairyBinding>() {
@@ -31,23 +37,73 @@ class TestFairyFragment : BaseViewBindingFragment<TreasureFairyFragmentTestFairy
private val fairyType by lazy { requireArguments().getInt("fairyType", MyFairyItemView.BASE) }
private val viewModel: FairyViewModel by activityViewModels()
private lateinit var rvDelegate: RVDelegate<FairyInfo>
private lateinit var testFairyAdapter: TestFairyAdapter
@SuppressLint("CheckResult")
override fun init() {
val fairyViews = listOf(binding.ivFairy0, binding.ivFairy1, binding.ivFairy2)
testFairyAdapter = TestFairyAdapter()
rvDelegate = RVDelegate.Builder<FairyInfo>()
.setAdapter(testFairyAdapter)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(GridLayoutManager(context, 5, LinearLayoutManager.VERTICAL, false))
.build()
viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
val fairyInfos = when (fairyType) {
val fairyInfos = it?.let {
when (fairyType) {
MyFairyItemView.EPIC -> {
it.middleElves
}
else -> {
it.highElves
it.lowElves
}
}
}
rvDelegate.setNewData(fairyInfos)
}
if (fairyType == MyFairyItemView.EPIC){
binding.tvTips.text = "点击投入试炼传说精灵"
}
testFairyAdapter.setOnItemClickListener { _, _, position ->
testFairyAdapter.getItem(position)?.let {
viewModel.addTestFairy(it)
}
}
fairyViews.forEachIndexed { index, imageView ->
imageView.setOnClickListener {
viewModel.minusTestFairy(index)
}
}
binding.tvReset.setOnClickListener {
viewModel.cleanTestParam()
}
binding.tvOneKeyAdd.setOnClickListener {
viewModel.oneKeyAdd(testFairyAdapter.data)
}
binding.ivBegin.setOnClickListener {
viewModel.testFairy(fairyType)
}
viewModel.testResultLiveData.observe(viewLifecycleOwner) {
it?.getContentIfNotHandled()?.let {
TestFairyResultDialog.newInstance().show(context)
}
}
viewModel.compoundFairyInfosLiveData.observe(viewLifecycleOwner) {
fairyViews.forEachIndexed { index, imageView ->
it?.get(index)?.elfPicUrl?.let { elfPicUrl ->
imageView.load(elfPicUrl)
} ?: run {
imageView.setImageDrawable(null)
}
}
testFairyAdapter.notifyDataSetChanged()
}
}
}

View File

@@ -0,0 +1,34 @@
package com.mango.moshen.treasurefairy
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.treasurefairy.PrizeInfo
import com.mango.core.treasurefairy.TestFairyRecordInfo
import com.mango.moshen.R
import java.text.SimpleDateFormat
import java.util.*
class TestFairyRecordAdapter :
BaseQuickAdapter<TestFairyRecordInfo, BaseViewHolder>(R.layout.treasure_fairy_item_test_fairy_record) {
private val formatYear = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
private val formatHour = SimpleDateFormat("HH:mm:ss", Locale.CHINA)
override fun convert(helper: BaseViewHolder, item: TestFairyRecordInfo) {
helper.setText(R.id.tv_time_year, formatYear.format(item.createTime))
helper.setText(R.id.tv_time_hour, formatHour.format(item.createTime))
helper.setText(R.id.tv_prize_name, item.elfName)
helper.setText(
R.id.tv_prize_type, when (item.elfLevel) {
1 -> "史诗试炼"
else -> "传说森林"
}
)
helper.setText(
R.id.tv_fairy_infos,
item.expendList.joinToString(separator = "\n") { "${it.elfName}x${it.elfNum}" })
}
}

View File

@@ -0,0 +1,59 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.treasurefairy.PrizeInfo
import com.mango.core.treasurefairy.TestFairyRecordInfo
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogTestFairyRecordBinding
import com.mango.moshen.databinding.TreasureFairyFragmentForestRecordBinding
import com.mango.moshen.ui.utils.RVDelegate
import com.netease.nim.uikit.common.util.sys.ScreenUtil
class TestFairyRecordDialog : BaseDialog<TreasureFairyDialogTestFairyRecordBinding>() {
companion object {
fun newInstance(): TestFairyRecordDialog {
val args = Bundle()
val fragment = TestFairyRecordDialog()
fragment.arguments = args
return fragment
}
}
private var page = 1
private val pageSize = 20
private lateinit var rvDelegate: RVDelegate<TestFairyRecordInfo>
private lateinit var prizeAdapter: TestFairyRecordAdapter
private val viewModel: FairyViewModel by activityViewModels()
override var width: Int = ScreenUtil.dip2px(318f)
override var height: Int = ScreenUtil.dip2px(388f)
@SuppressLint("CheckResult")
override fun init() {
prizeAdapter = TestFairyRecordAdapter()
rvDelegate = RVDelegate.Builder<TestFairyRecordInfo>()
.setAdapter(prizeAdapter)
.setPageSize(pageSize)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(LinearLayoutManager(context))
.build()
viewModel.testRecordLiveData.observe(viewLifecycleOwner) {
rvDelegate.loadData(it)
}
prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView)
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
page = if (isRefresh) 1 else (page + 1)
viewModel.getTestFairyRecordList(page, pageSize)
}
}

View File

@@ -0,0 +1,18 @@
package com.mango.moshen.treasurefairy
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.R
import com.mango.moshen.ui.utils.load
class TestFairyResultAdapter :
BaseQuickAdapter<FairyInfo, BaseViewHolder>(R.layout.treasure_fairy_item_forest_prize_single) {
override fun convert(helper: BaseViewHolder, item: FairyInfo) {
helper.getView<ImageView>(R.id.iv_prize_icon).load(item.elfPicUrl)
helper.setText(R.id.tv_prize_name, item.elfName)
}
}

View File

@@ -0,0 +1,60 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.treasurefairy.FairyInfo
import com.mango.core.treasurefairy.PrizeInfo
import com.mango.moshen.R
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogForestPrizeBinding
import com.mango.moshen.databinding.TreasureFairyDialogTestFairyResultBinding
import com.mango.moshen.ui.utils.RVDelegate
import com.netease.nim.uikit.common.util.sys.ScreenUtil
class TestFairyResultDialog : BaseDialog<TreasureFairyDialogTestFairyResultBinding>() {
private lateinit var rvDelegate: RVDelegate<FairyInfo>
private lateinit var prizeAdapter: TestFairyResultAdapter
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.WRAP_CONTENT
override var gravity = Gravity.CENTER
private val viewModel: FairyViewModel by activityViewModels()
companion object {
fun newInstance(): TestFairyResultDialog {
val args = Bundle()
val fragment = TestFairyResultDialog()
fragment.arguments = args
return fragment
}
}
@SuppressLint("CheckResult")
override fun init() {
binding.tvClose.setOnClickListener {
dismissAllowingStateLoss()
}
val prizeInfoList = viewModel.testResultLiveData.value
prizeAdapter = TestFairyResultAdapter()
rvDelegate = RVDelegate.Builder<FairyInfo>()
.setAdapter(prizeAdapter)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(
LinearLayoutManager(context)
)
.build()
rvDelegate.setNewData(arrayListOf(prizeInfoList?.peekContent()))
}
}

View File

@@ -80,7 +80,7 @@ public class MsgViewHolderFairy extends MsgViewHolderBase implements View.OnClic
public void onClick(View v) {
FairySendAttachment attachment = (FairySendAttachment) message.getAttachment();
SimpleUserInfo userInfo = new SimpleUserInfo(attachment.getNick(), attachment.getUid(), 0, "", "");
FairyInfo fairyInfo = new FairyInfo(attachment.getElfId(), 1, 1, attachment.getElfName(), attachment.getElfPicUrl());
FairyInfo fairyInfo = new FairyInfo(attachment.getElfId(), 1, 1, attachment.getElfName(), attachment.getElfPicUrl(),0);
Bundle bundle = new Bundle();
bundle.putSerializable("userInfo", userInfo);
bundle.putSerializable("fairyInfo", fairyInfo);

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:angle="90"
android:endColor="#00B9AF"
android:startColor="#006E7C" />
</shape>

View File

@@ -93,6 +93,7 @@
app:layout_constraintTop_toTopOf="@id/rg" />
<TextView
android:id="@+id/tv_record"
android:layout_width="24dp"
android:layout_height="65dp"
android:layout_marginTop="4dp"

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="318dp"
android:layout_height="388dp"
android:layout_gravity="center"
android:background="@drawable/treasure_fairy_bg_my_fairy_record"
android:orientation="vertical"
android:paddingStart="5dp"
android:paddingEnd="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="53dp"
android:text="试炼记录"
android:textColor="@color/white"
android:textSize="15sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="试炼时间"
android:textColor="@color/white"
android:textSize="13sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="类型"
android:textColor="@color/white"
android:textSize="13sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="投入精灵"
android:textColor="@color/white"
android:textSize="13sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="获得奖励"
android:textColor="@color/white"
android:textSize="13sp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:layout_marginBottom="42dp"
android:overScrollMode="never"
android:scrollbars="none" />
</LinearLayout>

View File

@@ -0,0 +1,64 @@
<?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:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="281dp"
android:layout_height="285dp"
android:background="@drawable/treasure_fairy_bg_forest_prize_single"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="53dp"
android:text="获得精灵"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold"
android:includeFontPadding="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="5dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="5dp"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_constraintBottom_toTopOf="@id/tv_close"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<TextView
android:id="@+id/tv_close"
android:layout_width="104dp"
android:layout_height="32dp"
android:layout_marginBottom="42dp"
android:background="@drawable/treasure_fairy_bg_forest_prize_close"
android:gravity="center"
android:text="关 闭"
android:textColor="#ff008573"
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -27,6 +27,33 @@
app:layout_constraintTop_toTopOf="@id/view_bg_top"
app:layout_constraintWidth_percent="0.91" />
<ImageView
android:id="@+id/iv_fairy_0"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="30dp"
android:layout_marginBottom="46dp"
app:layout_constraintBottom_toBottomOf="@id/view_bg_anim"
app:layout_constraintStart_toStartOf="@id/view_bg_anim" />
<ImageView
android:id="@+id/iv_fairy_1"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginBottom="26dp"
app:layout_constraintBottom_toBottomOf="@id/view_bg_anim"
app:layout_constraintEnd_toEndOf="@id/view_bg_anim"
app:layout_constraintStart_toStartOf="@id/view_bg_anim" />
<ImageView
android:id="@+id/iv_fairy_2"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="46dp"
app:layout_constraintBottom_toBottomOf="@id/view_bg_anim"
app:layout_constraintEnd_toEndOf="@id/view_bg_anim" />
<ImageView
android:id="@+id/iv_begin"
android:layout_width="142dp"
@@ -90,6 +117,7 @@
app:layout_constraintStart_toStartOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"

View File

@@ -16,6 +16,7 @@
android:layout_gravity="center"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
android:background="@drawable/shape_006e7c_to_00b9af"
app:cborder_color="#F4FFC3"
app:cborder_width="1px" />

View File

@@ -15,6 +15,7 @@
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:cborder_color="#F4FFC3"
android:background="@drawable/shape_006e7c_to_00b9af"
app:cborder_width="1px" />
<TextView

View File

@@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout 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:layout_marginStart="2dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="2dp"
android:layout_marginBottom="5dp"
android:background="@drawable/treasure_fairy_bg_test_fairy_item_unselect">
<LinearLayout
android:id="@+id/ll_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/treasure_fairy_bg_test_fairy_item_select"
android:gravity="center"
android:orientation="vertical">
@@ -39,5 +47,7 @@
android:text="1/5"
android:textColor="@color/white"
android:textSize="11sp" />
</LinearLayout>
</FrameLayout>
</LinearLayout>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:background="@color/black">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_time_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="2023.03.02" />
<TextView
android:id="@+id/tv_time_hour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="11sp"
tools:text="18:25:56" />
</LinearLayout>
<TextView
android:id="@+id/tv_prize_type"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="@color/white"
android:textSize="13sp"
tools:text="类型" />
<TextView
android:id="@+id/tv_fairy_infos"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="小火龙x1" />
<TextView
android:id="@+id/tv_prize_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:textColor="#FEF8A8"
android:textSize="12sp"
tools:text="获得奖励" />
</LinearLayout>

View File

@@ -0,0 +1,6 @@
package com.mango.core.treasurefairy
data class Compound(
val elfId: Long,
val elfNum: Int
)

View File

@@ -8,4 +8,5 @@ data class FairyInfo(
val elfLevel: Int = 0,
val elfName: String = "",
val elfPicUrl: String = "",
var selectedNum:Int
) : Serializable

View File

@@ -0,0 +1,6 @@
package com.mango.core.treasurefairy
data class FairyTestParam(
val expendList: MutableList<Compound> = arrayListOf(),
var level: Int = 0,
)

View File

@@ -0,0 +1,10 @@
package com.mango.core.treasurefairy
data class TestFairyRecordInfo(
val compoundLevel: Int = 0,
val createTime: Long = 0,
val elfLevel: Int = 0,
val elfName: String = "",
val expendList: List<FairyInfo> = listOf(),
val recordId: Long = 0
)

View File

@@ -0,0 +1,7 @@
package com.mango.core.treasurefairy
data class TestResultInfo(
val level: Int,
val fairyInfo: FairyInfo?
)

View File

@@ -3,6 +3,7 @@ package com.mango.core.treasurefairy
import com.mango.core.bean.response.ServiceResult
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.manager.AvRoomDataManager
import com.mango.core.mentoring_relationship.bean.SimpleGiftVo
import com.mango.core.utils.net.launchRequest
import com.mango.xchat_android_library.net.rxnet.RxNet
import retrofit2.http.*
@@ -65,6 +66,17 @@ object TreasureFairyModel {
api.getSendFairyList(page, pageSize)
}
suspend fun testFairy(fairyTestParam: FairyTestParam): FairyInfo? = launchRequest {
api.testFairy(fairyTestParam)
}
suspend fun getTestFairyRecordList(
page: Int,
pageSize: Int
): List<TestFairyRecordInfo>? = launchRequest {
api.getTestFairyRecordList(page, pageSize)
}
private interface Api {
@@ -176,6 +188,22 @@ object TreasureFairyModel {
@Query("pageSize") pageSize: Int
): ServiceResult<List<SendFairyInfo>>
/**
* 合成礼物
*/
@POST("act/seize-treasure/elf/compound")
suspend fun testFairy(@Body fairyTestParam: FairyTestParam): ServiceResult<FairyInfo>
/**
* 合成礼物记录
*
*/
@GET("act/seize-treasure/elf/compound/record")
suspend fun getTestFairyRecordList(
@Query("page") page: Int,
@Query("pageSize") pageSize: Int
): ServiceResult<List<TestFairyRecordInfo>>
}
}