夺宝精灵:我的精灵接口对接

This commit is contained in:
huangjian
2023-02-23 19:07:48 +08:00
parent f000f75cd4
commit 30fdd43119
38 changed files with 1332 additions and 145 deletions

View File

@@ -4,12 +4,11 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.mango.moshen.base.BaseViewModel
import com.mango.core.bean.response.ListResult
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.home.bean.HomeRoomInfo
import com.mango.core.home.model.HomeModel
import com.mango.core.treasurefairy.DrawInfo
import com.mango.core.treasurefairy.ForestInfo
import com.mango.core.treasurefairy.PrizeInfo
import com.mango.core.treasurefairy.TreasureFairyModel
import com.mango.core.room.wishlist.WishListModel
import com.mango.core.treasurefairy.*
import com.mango.core.utils.net.ServerException
import com.mango.core.utils.toast
import com.mango.moshen.base.Event
@@ -34,17 +33,29 @@ class FairyViewModel : BaseViewModel() {
private val _forestInfoLiveData = MutableLiveData<ForestInfo>()
val forestInfoLiveData: LiveData<ForestInfo> = _forestInfoLiveData
private val _forestPoolLiveData = MutableLiveData<Pair<Int,List<PrizeInfo>?>>()
val forestPoolLiveData: LiveData<Pair<Int,List<PrizeInfo>?>> = _forestPoolLiveData
private val _forestPoolLiveData = MutableLiveData<Pair<Int, List<PrizeInfo>?>>()
val forestPoolLiveData: LiveData<Pair<Int, List<PrizeInfo>?>> = _forestPoolLiveData
private val _forestRecordLiveData = MutableLiveData<ListResult<PrizeInfo>>()
val forestRecordLiveData: LiveData<ListResult<PrizeInfo>> = _forestRecordLiveData
private val _myFairyInfoLiveData = MutableLiveData<MyFairyInfo>()
val myFairyInfoLiveData: LiveData<MyFairyInfo> = _myFairyInfoLiveData
private val _friendsListLiveData = MutableLiveData<List<SimpleUserInfo>>()
val friendsListLiveData: LiveData<List<SimpleUserInfo>> = _friendsListLiveData
private val _sendFairyLiveData = MutableLiveData<Boolean>()
val sendFairyLiveData: LiveData<Boolean> = _sendFairyLiveData
private val _askForFairyLiveData = MutableLiveData<Boolean>()
val askForFairyLiveData: LiveData<Boolean> = _askForFairyLiveData
private val _forestRecordLiveData = MutableLiveData<List<PrizeInfo>>()
val forestRecordLiveData: LiveData<List<PrizeInfo>> = _forestRecordLiveData
init {
initPrizeInfoList()
}
fun initDrawInfo() {
safeLaunch(
onError = {
@@ -56,7 +67,7 @@ class FairyViewModel : BaseViewModel() {
)
}
fun initPrizeInfoList() {
fun initPrizeInfoList() {
safeLaunch(
onError = {
_prizeInfoListLiveData.value = null
@@ -116,18 +127,76 @@ class FairyViewModel : BaseViewModel() {
_forestPoolLiveData.value = null
},
block = {
_forestPoolLiveData.value = Pair(poolLevel,TreasureFairyModel.getForestPrizePool(poolLevel))
_forestPoolLiveData.value =
Pair(poolLevel, TreasureFairyModel.getForestPrizePool(poolLevel))
}
)
}
fun getForestRecord() {
fun getForestRecord(
page: Int,
pageSize: Int
) {
safeLaunch(
onError = {
_forestRecordLiveData.value = null
_forestRecordLiveData.value = ListResult.failed(page)
},
block = {
_forestRecordLiveData.value = TreasureFairyModel.getForestRecord()
val result = TreasureFairyModel.getForestRecord(page, pageSize)
_forestRecordLiveData.value = ListResult.success(result, page)
}
)
}
fun getMyFairyInfo() {
safeLaunch(
onError = {
_myFairyInfoLiveData.value = null
it.message.toast()
},
block = {
_myFairyInfoLiveData.value = TreasureFairyModel.getMyFairyInfo()
}
)
}
fun getFriendsList() {
safeLaunch(
onError = {
_friendsListLiveData.value = null
it.message.toast()
},
block = {
_friendsListLiveData.value = TreasureFairyModel.getFriendsList()
}
)
}
fun askForFairy(elfId: Long, targetUid: Long) {
safeLaunch(
onError = {
_askForFairyLiveData.value = false
it.message.toast()
},
block = {
TreasureFairyModel.askForFairy(elfId, targetUid)
_askForFairyLiveData.value = true
"已向好友发送索要信息".toast()
}
)
}
fun sendFairy(elfId: Long, targetUid: Long) {
safeLaunch(
onError = {
_sendFairyLiveData.value = false
it.message.toast()
},
block = {
TreasureFairyModel.sendFairy(elfId, targetUid)
_sendFairyLiveData.value = true
"赠送成功!".toast()
}
)
}

View File

@@ -22,6 +22,8 @@ class ForestRecordFragment : BaseViewBindingFragment<TreasureFairyFragmentForest
}
}
private var page = 1
private val pageSize = 20
private lateinit var rvDelegate: RVDelegate<PrizeInfo>
private lateinit var prizeAdapter: ForestPrizesRecordAdapter
private val viewModel: FairyViewModel by activityViewModels()
@@ -29,16 +31,25 @@ class ForestRecordFragment : BaseViewBindingFragment<TreasureFairyFragmentForest
@SuppressLint("CheckResult")
override fun init() {
prizeAdapter = ForestPrizesRecordAdapter()
rvDelegate = RVDelegate.Builder<PrizeInfo>()
.setAdapter(prizeAdapter)
.setPageSize(pageSize)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(LinearLayoutManager(context))
.build()
viewModel.getForestRecord()
viewModel.forestRecordLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
rvDelegate.loadData(it)
}
prizeAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView)
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
page = if (isRefresh) 1 else (page + 1)
viewModel.getForestRecord(page, pageSize)
}
}

View File

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.os.Bundle
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
@@ -27,6 +28,8 @@ class MyFairyDialog : BaseDialog<TreasureFairyDialogMyFairyBinding>() {
}
}
private val viewModel: FairyViewModel by activityViewModels()
@SuppressLint("CheckResult")
override fun init() {
binding.ivBack.setOnClickListener {
@@ -48,14 +51,16 @@ class MyFairyDialog : BaseDialog<TreasureFairyDialogMyFairyBinding>() {
}
}
})
binding.viewPager.adapter = RoomVPAdapter(
childFragmentManager,
listOf(
MyFairyFragment.newInstance(),
MyFairyFragment.newInstance(),
MyFairyFragment.newInstance()
MyFairyFragment.newInstance(MyFairyItemView.BASE),
MyFairyFragment.newInstance(MyFairyItemView.EPIC),
MyFairyFragment.newInstance(MyFairyItemView.LEGEND)
)
)
viewModel.getMyFairyInfo()
}
}

View File

@@ -4,7 +4,10 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import com.mango.core.room.game.GameInfo
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.R
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.base.BaseFragment
import com.mango.moshen.base.BaseViewBindingFragment
@@ -15,17 +18,62 @@ import com.mango.moshen.ui.utils.RVDelegate
class MyFairyFragment : BaseViewBindingFragment<TreasureFairyFragmentMyFairyBinding>() {
companion object{
fun newInstance(): MyFairyFragment{
companion object {
fun newInstance(fairyType: Int): MyFairyFragment {
val args = Bundle()
args.putInt("fairyType", fairyType)
val fragment = MyFairyFragment()
fragment.arguments = args
return fragment
}
}
private val fairyType by lazy { requireArguments().getInt("fairyType", MyFairyItemView.BASE) }
private val viewModel: FairyViewModel by activityViewModels()
@SuppressLint("CheckResult")
override fun init() {
val fairyItems = arrayListOf(
binding.fairyItem0,
binding.fairyItem1,
binding.fairyItem2,
binding.fairyItem3,
binding.fairyItem4
)
fairyItems.forEach {
it.setFairyType(fairyType)
it.setOnItemClickListener { view, fairyInfo ->
if (fairyInfo == null) return@setOnItemClickListener
when (view.id) {
R.id.iv_fairy_send -> {
MyFairySearchFriendsDialog.newInstance(fairyInfo, true).show(context)
}
R.id.iv_fairy_get -> {
MyFairySearchFriendsDialog.newInstance(fairyInfo, false).show(context)
}
}
}
}
viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
val fairyInfos = when (fairyType) {
MyFairyItemView.BASE -> {
it.lowElves
}
MyFairyItemView.EPIC -> {
it.middleElves
}
else -> {
it.highElves
}
}
fairyInfos?.let {
fairyItems.forEachIndexed { index, itemView ->
itemView.setFairyInfo(it.getOrNull(index))
}
}
}
}
}

View File

@@ -0,0 +1,20 @@
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.gift.bean.SimpleUserInfo
import com.mango.core.utils.ifNullOrEmpty
import com.mango.moshen.R
import com.mango.moshen.ui.utils.load
class MyFairyFriendsAdapter :
BaseQuickAdapter<SimpleUserInfo, BaseViewHolder>(R.layout.treasure_fairy_item_my_fairy_friend) {
override fun convert(helper: BaseViewHolder, item: SimpleUserInfo) {
helper.getView<ImageView>(R.id.iv_avatar).load(item.avatar)
helper.setText(R.id.tv_nickname, item.nick)
helper.setText(R.id.tv_desc, item.userDesc.ifNullOrEmpty { "我是个默认签名" })
}
}

View File

@@ -1,12 +1,18 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import androidx.annotation.Nullable
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.R
import com.mango.moshen.databinding.TreasureFairyItemMyFairyBaseBinding
import com.mango.moshen.ui.utils.load
/**
* 技能卡
@@ -17,8 +23,14 @@ class MyFairyItemView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val binding: TreasureFairyItemMyFairyBaseBinding
companion object {
const val BASE = 1
const val EPIC = 2
const val LEGEND = 3
}
private val binding: TreasureFairyItemMyFairyBaseBinding
private var fairyInfo: FairyInfo? = null
init {
inflate(context, R.layout.treasure_fairy_item_my_fairy_base, this)
@@ -43,6 +55,67 @@ class MyFairyItemView @JvmOverloads constructor(
binding.clBack.isVisible = false
}, 250)
}
binding.ivFairySend.setOnClickListener {
}
}
@SuppressLint("SetTextI18n")
fun setFairyInfo(fairyInfo: FairyInfo?) {
this.fairyInfo = fairyInfo
fairyInfo?.let {
binding.tvFairyName.text = it.elfName
binding.tvFairyNameBack.text = it.elfName
binding.tvFairyNum.text = "x${it.elfNum}"
binding.tvFairyNumBack.text = "x${it.elfNum}"
binding.ivFairyIcon.load(it.elfPicUrl)
binding.ivFairyIconBack.load(it.elfPicUrl)
binding.ivFairyEmpty.isVisible = it.elfNum == 0
binding.ivFairySend.isVisible = it.elfNum > 0
binding.viewCover.isVisible = it.elfNum == 0
}
}
fun setOnItemClickListener(onItemClickListener: (view: View, fairyInfo: FairyInfo?) -> Unit) {
binding.ivFairyGet.setOnClickListener {
onItemClickListener(it, fairyInfo)
}
binding.ivFairySend.setOnClickListener {
onItemClickListener(it, fairyInfo)
}
}
fun setFairyType(fairyType: Int) {
when (fairyType) {
BASE -> {
binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base)
binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base)
binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_base_cover)
binding.tvFairyName.setTextColor("#A4FFFC".toColorInt())
binding.tvFairyNameBack.setTextColor("#A4FFFC".toColorInt())
binding.tvFairyNum.setTextColor("#FFE8AA".toColorInt())
binding.tvFairyNumBack.setTextColor("#FFE8AA".toColorInt())
}
EPIC -> {
binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic)
binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic)
binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_epic_cover)
binding.tvFairyName.setTextColor("#FFFED6".toColorInt())
binding.tvFairyNameBack.setTextColor("#FFFED6".toColorInt())
binding.tvFairyNum.setTextColor("#59FDFF".toColorInt())
binding.tvFairyNumBack.setTextColor("#59FDFF".toColorInt())
}
LEGEND -> {
binding.viewBg.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend)
binding.viewBgBack.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend)
binding.viewCover.setBackgroundResource(R.drawable.treasure_fairy_bg_my_fairy_item_legend_cover)
binding.tvFairyName.setTextColor(Color.WHITE)
binding.tvFairyNameBack.setTextColor(Color.WHITE)
binding.tvFairyNum.setTextColor("#FFE8AA".toColorInt())
binding.tvFairyNumBack.setTextColor("#FFE8AA".toColorInt())
}
}
}
}

View File

@@ -0,0 +1,22 @@
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
import java.text.SimpleDateFormat
import java.util.*
class MyFairyRecordAdapter :
BaseQuickAdapter<FairyInfo, BaseViewHolder>(R.layout.treasure_fairy_item_my_fairy_record) {
private val format = SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒", Locale.CHINA)
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,43 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogMyFairyRecordBinding
import com.mango.moshen.ui.utils.RVDelegate
class MyFairyRecordDialog : BaseDialog<TreasureFairyDialogMyFairyRecordBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var gravity = Gravity.CENTER
companion object {
fun newInstance(): MyFairyRecordDialog {
val args = Bundle()
val fragment = MyFairyRecordDialog()
fragment.arguments = args
return fragment
}
}
private lateinit var rvDelegate: RVDelegate<FairyInfo>
private lateinit var recordAdapter: MyFairyRecordAdapter
private val viewModel: FairyViewModel by activityViewModels()
@SuppressLint("CheckResult")
override fun init() {
viewModel.getMyFairyInfo()
recordAdapter = MyFairyRecordAdapter()
rvDelegate = RVDelegate.Builder<FairyInfo>()
.setAdapter(recordAdapter)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(LinearLayoutManager(context))
.build()
}
}

View File

@@ -0,0 +1,54 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogMyFairySearchFriendBinding
import com.mango.moshen.ui.utils.RVDelegate
class MyFairySearchFriendsDialog : BaseDialog<TreasureFairyDialogMyFairySearchFriendBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var gravity = Gravity.BOTTOM
companion object {
fun newInstance(fairyInfo: FairyInfo,isSend:Boolean): MyFairySearchFriendsDialog {
val args = Bundle()
args.putSerializable("fairyInfo", fairyInfo)
args.putBoolean("isSend", isSend)
val fragment = MyFairySearchFriendsDialog()
fragment.arguments = args
return fragment
}
}
private lateinit var rvDelegate: RVDelegate<SimpleUserInfo>
private lateinit var friendsAdapter: MyFairyFriendsAdapter
private val viewModel: FairyViewModel by activityViewModels()
@SuppressLint("CheckResult")
override fun init() {
friendsAdapter = MyFairyFriendsAdapter()
rvDelegate = RVDelegate.Builder<SimpleUserInfo>()
.setAdapter(friendsAdapter)
.setRecyclerView(binding.recyclerView)
.setLayoutManager(LinearLayoutManager(context))
.build()
friendsAdapter.setOnItemClickListener { _, _, position ->
friendsAdapter.getItem(position)?.let {
MyFairySendDialog.newInstance(requireArguments(), it).show(context)
}
}
viewModel.getFriendsList()
viewModel.friendsListLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}
}
}

View File

@@ -0,0 +1,67 @@
package com.mango.moshen.treasurefairy
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.text.style.ForegroundColorSpan
import android.view.Gravity
import android.view.WindowManager
import androidx.core.graphics.toColorInt
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.treasurefairy.FairyInfo
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.TreasureFairyDialogMyFairySendBinding
import com.mango.moshen.ui.utils.RVDelegate
import com.mango.moshen.ui.utils.load
import com.mango.moshen.utils.SpannableBuilder
class MyFairySendDialog : BaseDialog<TreasureFairyDialogMyFairySendBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var gravity = Gravity.CENTER
companion object {
fun newInstance(bundle: Bundle, userInfo: SimpleUserInfo): MyFairySendDialog {
val args = Bundle()
args.putSerializable("userInfo", userInfo)
args.putAll(bundle)
val fragment = MyFairySendDialog()
fragment.arguments = args
return fragment
}
}
private val viewModel: FairyViewModel by activityViewModels()
private val userInfo by lazy { requireArguments().getSerializable("userInfo") as SimpleUserInfo }
private val fairyInfo by lazy { requireArguments().getSerializable("fairyInfo") as FairyInfo }
private val isSend by lazy { requireArguments().getBoolean("isSend") }
@SuppressLint("CheckResult")
override fun init() {
binding.ivFairyIcon.load(fairyInfo.elfPicUrl)
binding.tvContent.text =
SpannableBuilder()
.append(if (isSend) "确定赠送”" else "确定向", ForegroundColorSpan(Color.WHITE))
.append("${userInfo.nick}", ForegroundColorSpan("#FEF8AA".toColorInt()))
.append(
"${if (isSend) "" else "索要"}1张“${fairyInfo.elfName}”精灵卡吗?",
ForegroundColorSpan(Color.WHITE)
)
.build()
binding.tvSend.text = if (isSend) "赠 送" else "索 要"
binding.tvClose.setOnClickListener {
dismissAllowingStateLoss()
}
binding.tvSend.setOnClickListener {
if (isSend) {
viewModel.sendFairy(fairyInfo.elfId, userInfo.uid)
} else {
viewModel.askForFairy(fairyInfo.elfId, userInfo.uid)
}
}
}
}

View File

@@ -9,6 +9,7 @@ import com.mango.core.im.custom.bean.CarAttachment;
import com.mango.core.im.custom.bean.CarveUpGoldThirdLevelAttachment;
import com.mango.core.im.custom.bean.ChatHintAttachment;
import com.mango.core.im.custom.bean.CpInviteAttachment;
import com.mango.core.im.custom.bean.FairySendAttachment;
import com.mango.core.im.custom.bean.GiftAttachment;
import com.mango.core.im.custom.bean.InAppSharingFamilyAttachment;
import com.mango.core.im.custom.bean.InAppSharingMiniWorldAttachment;
@@ -44,6 +45,7 @@ import com.mango.moshen.ui.im.avtivity.NimP2PMessageActivity;
import com.mango.moshen.ui.im.chat.MsgViewHolderAudioParty;
import com.mango.moshen.ui.im.chat.MsgViewHolderChatHint;
import com.mango.moshen.ui.im.chat.MsgViewHolderContent;
import com.mango.moshen.ui.im.chat.MsgViewHolderFairy;
import com.mango.moshen.ui.im.chat.MsgViewHolderGift;
import com.mango.moshen.ui.im.chat.MsgViewHolderHello;
import com.mango.moshen.ui.im.chat.MsgViewHolderLevel;
@@ -173,6 +175,7 @@ public class ImInitHelper {
NimUIKit.registerMsgItemViewHolder(SkillMsgAttachment.class, MsgViewHolderSkill.class);
//CP
NimUIKit.registerMsgItemViewHolder(CpInviteAttachment.class, MsgViewHolderText.class);
NimUIKit.registerMsgItemViewHolder(FairySendAttachment.class, MsgViewHolderFairy.class);
NimUIKit.setSessionListener(listener);
NimUIKit.setContactEventListener(listener1);
}

View File

@@ -0,0 +1,79 @@
package com.mango.moshen.ui.im.chat;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.mango.core.gift.bean.SimpleUserInfo;
import com.mango.core.im.custom.bean.CustomAttachment;
import com.mango.core.im.custom.bean.FairySendAttachment;
import com.mango.core.im.custom.bean.NewbieHelloAttachment;
import com.mango.core.room.bean.RoomInfo;
import com.mango.core.room.model.AvRoomModel;
import com.mango.core.treasurefairy.FairyInfo;
import com.mango.core.utils.net.RxHelper;
import com.mango.moshen.R;
import com.mango.moshen.avroom.activity.AVRoomActivity;
import com.mango.moshen.treasurefairy.MyFairySendDialog;
import com.mango.moshen.ui.utils.ImageLoadUtils;
import com.mango.xchat_android_library.utils.SingleToastUtil;
import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase;
import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;
import io.reactivex.functions.BiConsumer;
/**
* Created by chenran on 2018/1/2.
*/
public class MsgViewHolderFairy extends MsgViewHolderBase implements View.OnClickListener {
private TextView tvContent;
private ImageView ivFairyIcon;
private View flIconBg;
public MsgViewHolderFairy(BaseMultiItemFetchLoadAdapter adapter) {
super(adapter);
}
@Override
protected int getContentResId() {
return R.layout.layout_msg_view_holder_fairy;
}
@Override
protected void inflateContentView() {
tvContent = findViewById(R.id.tv_content);
ivFairyIcon = findViewById(R.id.iv_fairy_icon);
flIconBg = findViewById(R.id.fl_icon_bg);
}
@Override
protected void bindContentView() {
FairySendAttachment attachment = (FairySendAttachment) message.getAttachment();
tvContent.setText(attachment.getMsgContent());
ImageLoadUtils.loadImage(context, attachment.getElfPicUrl(), ivFairyIcon);
if (isReceivedMessage()) {
flIconBg.setBackgroundResource(R.drawable.shape_white_8dp_round);
} else {
flIconBg.setBackgroundResource(R.drawable.shape_f5f4fa_8dp_round);
}
contentContainer.setOnClickListener(this);
}
@SuppressLint("CheckResult")
@Override
public void onClick(View v) {
FairySendAttachment attachment = (FairySendAttachment) message.getAttachment();
boolean isSend = attachment.getSecond() == CustomAttachment.CUSTOM_MSG_SUB_FAIRY_SEND;
SimpleUserInfo userInfo = new SimpleUserInfo(attachment.getTargetNick(), attachment.getTargetUid(), 0, "", "");
FairyInfo fairyInfo = new FairyInfo(attachment.getElfId(), 1, 1, attachment.getElfName(), attachment.getElfPicUrl());
Bundle bundle = new Bundle();
bundle.putSerializable("userInfo", userInfo);
bundle.putSerializable("fairyInfo", fairyInfo);
bundle.putBoolean("isSend", isSend);
MyFairySendDialog.Companion.newInstance(bundle, userInfo).show(context);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

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="rectangle">
<solid android:color="#00A69D" />
<corners android:radius="4dp" />
</shape>

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="rectangle">
<solid android:color="#00A69D" />
<corners android:radius="8dp" />
</shape>

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="rectangle">
<solid android:color="#066A6E" />
<corners android:radius="20dp" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_f4f4fa"/>
<corners android:topLeftRadius="@dimen/dp_10"
android:topRightRadius="@dimen/dp_10"/>
</shape>

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="rectangle">
<solid android:color="#F5F4FA" />
<corners android:radius="8dp" />
</shape>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_container"
android:layout_width="235dp"
android:layout_height="80dp"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/fl_icon_bg"
android:layout_width="62dp"
android:layout_height="62dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
android:background="@drawable/shape_white_8dp_round">
<ImageView
android:id="@+id/iv_fairy_icon"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_gravity="center"
android:src="@drawable/default_cover" />
</FrameLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:layout_marginEnd="15dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff171a58"
android:textSize="13sp"
tools:text="对方赠送了你一张“小火龙”精灵卡" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:text="点击查看>>"
android:textColor="#5FCCE4"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,50 @@
<?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="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_record"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="636:766"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6"
app:layout_constraintWidth_percent="0.85" />
<TextView
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="50dp"
android:gravity="center"
android:text="我的精灵记录"
android:textColor="@color/white"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
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="22dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="22dp"
android:layout_marginBottom="42dp"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,71 @@
<?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="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/bg_elf"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="750:1100"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:src="@drawable/treasure_fairy_bg_my_fairy_friend_title"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg" />
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="25dp"
android:src="@drawable/treasure_fairy_ic_back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg" />
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="32dp"
android:layout_marginStart="15dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_066a6e_20dp_round"
android:gravity="center_vertical"
android:hint="搜索好友"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:textColor="#59FDFF"
android:textColorHint="#59FDFF"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:clipToPadding="false"
android:paddingStart="15dp"
android:paddingEnd="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/edit_search" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,78 @@
<?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="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_send"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="562:570"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6"
app:layout_constraintWidth_percent="0.75" />
<TextView
android:id="@+id/tv_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="50dp"
android:gravity="center"
android:textColor="@color/white"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toTopOf="@id/view_bg"
tools:text="确认赠送“用户昵称123”1张“小火龙”精灵卡吗" />
<com.mango.moshen.common.widget.CircleImageView
android:id="@+id/iv_fairy_icon"
android:layout_width="90dp"
android:layout_height="90dp"
android:src="@drawable/default_avatar"
app:cborder_color="#F4FFC3"
app:cborder_width="1px"
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_content" />
<TextView
android:id="@+id/tv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="42dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_send_cancel"
android:gravity="center"
android:text="关 闭"
android:textColor="#008573"
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toStartOf="@id/tv_send"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_send_buy"
android:gravity="center"
android:text="购 买"
android:textColor="#8A4801"
android:textSize="13sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_close"
app:layout_constraintTop_toTopOf="@id/tv_close" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -8,12 +8,46 @@
<com.mango.moshen.treasurefairy.MyFairyItemView
android:id="@+id/fairy_item_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="15dp"
app:layout_constraintEnd_toStartOf="@id/fairy_item_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mango.moshen.treasurefairy.MyFairyItemView
android:id="@+id/fairy_item_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/fairy_item_2"
app:layout_constraintStart_toEndOf="@id/fairy_item_0"
app:layout_constraintTop_toTopOf="@id/fairy_item_0" />
<com.mango.moshen.treasurefairy.MyFairyItemView
android:id="@+id/fairy_item_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/fairy_item_1"
app:layout_constraintTop_toTopOf="@id/fairy_item_0" />
<com.mango.moshen.treasurefairy.MyFairyItemView
android:id="@+id/fairy_item_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toStartOf="@id/fairy_item_4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fairy_item_0" />
<com.mango.moshen.treasurefairy.MyFairyItemView
android:id="@+id/fairy_item_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/fairy_item_3"
app:layout_constraintTop_toTopOf="@id/fairy_item_3" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -28,12 +28,12 @@
android:layout_marginTop="30dp"
android:includeFontPadding="false"
android:maxLines="1"
android:text="小火龙"
android:textColor="#A4FFFC"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:text="小火龙" />
<TextView
android:id="@+id/tv_fairy_num"
@@ -44,7 +44,7 @@
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:text="精灵球"
android:text="x0"
android:textColor="#FFE8AA"
android:textSize="11dp"
app:layout_constraintEnd_toEndOf="parent"
@@ -62,6 +62,29 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/view_cover"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_base_cover"
android:visibility="gone"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_fairy_empty"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:src="@drawable/treasure_fairy_ic_my_fairy_empty"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
@@ -87,13 +110,13 @@
android:layout_marginTop="30dp"
android:includeFontPadding="false"
android:maxLines="1"
android:text="小火龙"
android:rotationY="180"
android:textColor="#A4FFFC"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:text="小火龙" />
<TextView
android:id="@+id/tv_fairy_num_back"
@@ -104,9 +127,9 @@
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:text="精灵球"
android:textColor="#FFE8AA"
android:rotationY="180"
android:text="x0"
android:textColor="#FFE8AA"
android:textSize="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -115,9 +138,9 @@
<ImageView
android:id="@+id/iv_fairy_icon_back"
android:layout_width="76dp"
android:rotationY="180"
android:layout_height="73dp"
android:layout_marginBottom="13dp"
android:rotationY="180"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/view_bg_back"
@@ -125,7 +148,7 @@
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/view_cover"
android:id="@+id/view_cover_back"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_base_cover"
@@ -160,20 +183,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_fairy_send" />
<ImageView
android:id="@+id/iv_fairy_empty"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:rotationY="180"
android:src="@drawable/treasure_fairy_ic_my_fairy_empty"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -1,108 +1,179 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:id="@+id/view_bg"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_epic"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<View
android:id="@+id/view_cover"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_epic_cover"
android:visibility="gone"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_bg"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_epic"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_fairy_send"
android:layout_width="54dp"
android:layout_height="54dp"
android:src="@drawable/treasure_fairy_ic_my_fairy_send"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/iv_fairy_get"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/tv_fairy_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:includeFontPadding="false"
android:maxLines="1"
android:text="小火龙"
android:textColor="#FFFED6"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_fairy_get"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:src="@drawable/treasure_fairy_ic_my_fairy_get"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toBottomOf="@id/iv_fairy_send" />
<TextView
android:id="@+id/tv_fairy_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:text="精灵球"
android:textColor="#59FDFF"
android:textSize="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_fairy_name" />
<ImageView
android:id="@+id/iv_fairy_empty"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:src="@drawable/treasure_fairy_ic_my_fairy_empty"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintStart_toStartOf="@id/view_bg"
app:layout_constraintTop_toTopOf="@id/view_bg" />
<ImageView
android:id="@+id/iv_fairy_icon"
android:layout_width="76dp"
android:layout_height="73dp"
android:layout_marginBottom="13dp"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_fairy_name"
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:includeFontPadding="false"
android:maxLines="1"
android:text="小火龙"
android:textColor="#FFFED6"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:visibility="gone">
<TextView
android:id="@+id/tv_fairy_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:text="精灵球"
android:textColor="#59FDFF"
android:textSize="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_fairy_name" />
<View
android:id="@+id/view_bg_back"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_epic"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_fairy_icon"
android:layout_width="76dp"
android:layout_height="73dp"
android:layout_marginBottom="13dp"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_fairy_name_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:includeFontPadding="false"
android:maxLines="1"
android:text="小火龙"
android:rotationY="180"
android:textColor="#FFFED6"
android:textSize="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_fairy_num_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:text="精灵球"
android:textColor="#59FDFF"
android:rotationY="180"
android:textSize="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_fairy_name_back" />
<ImageView
android:id="@+id/iv_fairy_icon_back"
android:layout_width="76dp"
android:rotationY="180"
android:layout_height="73dp"
android:layout_marginBottom="13dp"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/view_bg_back"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/view_cover"
android:layout_width="115dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_my_fairy_item_epic_cover"
app:layout_constraintDimensionRatio="230:324"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_fairy_send"
android:layout_width="54dp"
android:layout_height="54dp"
android:rotationY="180"
android:src="@drawable/treasure_fairy_ic_my_fairy_send"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/iv_fairy_get"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<ImageView
android:id="@+id/iv_fairy_get"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:rotationY="180"
android:src="@drawable/treasure_fairy_ic_my_fairy_get"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_fairy_send" />
<ImageView
android:id="@+id/iv_fairy_empty"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginTop="13dp"
android:rotationY="180"
android:src="@drawable/treasure_fairy_ic_my_fairy_empty"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -0,0 +1,51 @@
<?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="4dp"
android:layout_marginBottom="4dp"
android:background="@drawable/shape_00a69d_4dp_round"
android:orientation="horizontal">
<com.mango.moshen.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="49dp"
android:layout_height="49dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:src="@drawable/default_avatar"
app:cborder_color="#FFE8AA"
app:cborder_width="1px" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginStart="8dp"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户昵称呀呀呀呀"
android:textColor="@color/white"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="15dp"
android:ellipsize="end"
android:lines="1"
android:text="你好啊,好久不见是吧,不见就不见不不见不不不见就不见不不见不不不见就不见不不见不不"
android:textColor="#59fdff"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,48 @@
<?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="8dp"
android:layout_marginBottom="8dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_record_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="2023年3月2日 20时36分56秒" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="58dp"
android:layout_marginTop="6dp"
android:background="@drawable/shape_00a69d_8dp_round"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_fairy_icon"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="12dp"
android:src="@drawable/default_cover"
app:riv_border_color="#FFE8AA"
app:riv_border_width="1px"
app:riv_corner_radius="4dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="20dp"
tools:text="在猛犸森林获得一张“小火龙”精灵卡"
android:textColor="@color/white"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>

View File

@@ -6,5 +6,6 @@ data class SimpleUserInfo(
val nick: String? = null,
val uid: Long = 0L,
val erbanNo: Long = 0L,
val avatar: String? = null
val avatar: String? = null,
val userDesc: String? = null
) : Serializable

View File

@@ -17,6 +17,7 @@ import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_DRAGON_B
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_DRAW_GIFT_EFFECT;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP_NOTICE;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_MEMBER_COUNT;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_ROOM_NOTIFY;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_TOPIC;
@@ -46,6 +47,8 @@ import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SHARE_MI
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SHARE_ROOM;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SHARE_TEAM;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SIGN_IN;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FAIRY_ASK_FOR;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FAIRY_SEND;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_APPLY_EXIT;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_APPLY_JOIN;
import static com.mango.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_MANAGER_INVITE;
@@ -604,6 +607,13 @@ public class CustomAttachParser implements MsgAttachmentParser {
break;
case CUSTOM_MSG_KITCHEN:
attachment = new RoomKitchenAttachment(first, second);
break;
case CUSTOM_MSG_FAIRY:
if (second == CUSTOM_MSG_SUB_FAIRY_SEND ||
second == CUSTOM_MSG_SUB_FAIRY_ASK_FOR) {
attachment = new FairySendAttachment(first, second);
}
break;
default:
LogUtils.e("未定义的first,请现在CustomAttachParser中解析first=" + first + " second=" + second);

View File

@@ -433,7 +433,9 @@ public class CustomAttachment implements MsgAttachment {
public static final int CUSTOM_MSG_SUB_KITCHEN_ALL_ROOM = 961; // 深海奇缘礼物房间飘屏通知(动态)
public static final int CUSTOM_MSG_SUB_kitchen_ALL_APP = 962; // 深海奇缘礼物全服飘屏通知
public static final int CUSTOM_MSG_FAIRY = 97; // 夺宝精灵
public static final int CUSTOM_MSG_SUB_FAIRY_SEND = 9701; // 赠送小精灵
public static final int CUSTOM_MSG_SUB_FAIRY_ASK_FOR = 9702; // 索要小精灵
/**
* 自定义消息附件的类型,根据该字段区分不同的自定义消息
*/

View File

@@ -0,0 +1,94 @@
package com.mango.core.im.custom.bean;
import com.alibaba.fastjson.JSONObject;
/**
* Created by chenran on 2017/10/4.
*/
public class FairySendAttachment extends CustomAttachment {
private long uid;
private long targetUid;
private String targetNick;
private long elfId;
private String elfPicUrl;
private String elfName;
private String msgContent;
public FairySendAttachment(int first, int second) {
super(first, second);
}
@Override
protected void parseData(JSONObject jsonObject) {
uid = jsonObject.getLongValue("uid");
uid = jsonObject.getLongValue("targetUid");
uid = jsonObject.getLongValue("elfId");
elfPicUrl = jsonObject.getString("elfPicUrl");
msgContent = jsonObject.getString("msgContent");
targetNick = jsonObject.getString("targetNick");
elfName = jsonObject.getString("elfName");
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public long getTargetUid() {
return targetUid;
}
public void setTargetUid(long targetUid) {
this.targetUid = targetUid;
}
public long getElfId() {
return elfId;
}
public void setElfId(long elfId) {
this.elfId = elfId;
}
public String getElfPicUrl() {
return elfPicUrl;
}
public void setElfPicUrl(String elfPicUrl) {
this.elfPicUrl = elfPicUrl;
}
public String getMsgContent() {
return msgContent;
}
public void setMsgContent(String msgContent) {
this.msgContent = msgContent;
}
public String getTargetNick() {
return targetNick;
}
public void setTargetNick(String targetNick) {
this.targetNick = targetNick;
}
public String getElfName() {
return elfName;
}
public void setElfName(String elfName) {
this.elfName = elfName;
}
@Override
protected JSONObject packData() {
return null;
}
}

View File

@@ -0,0 +1,11 @@
package com.mango.core.treasurefairy
import java.io.Serializable
data class FairyInfo(
val elfId: Long = 0,
val elfNum: Int = 0,
val elfLevel: Int = 0,
val elfName: String = "",
val elfPicUrl: String = "",
) : Serializable

View File

@@ -0,0 +1,9 @@
package com.mango.core.treasurefairy
data class MyFairyInfo(
val highElves: ArrayList<FairyInfo>? = null,
val lowElves: ArrayList<FairyInfo>? = null,
val middleElves: ArrayList<FairyInfo>? = null,
val avatar: String = "",
val nick: String = "",
)

View File

@@ -1,6 +1,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.utils.net.launchRequest
import com.mango.xchat_android_library.net.rxnet.RxNet
@@ -26,8 +27,11 @@ object TreasureFairyModel {
api.drawForestFairy(drawNum, poolLevel)
}
suspend fun getForestRecord(): List<PrizeInfo>? = launchRequest {
api.getForestRecord()
suspend fun getForestRecord(
page: Int,
pageSize: Int
): List<PrizeInfo>? = launchRequest {
api.getForestRecord(page, pageSize)
}
suspend fun getForestPrizePool(poolLevel: Int): List<PrizeInfo>? = launchRequest {
@@ -38,6 +42,22 @@ object TreasureFairyModel {
api.getForestInfo()
}
suspend fun getMyFairyInfo(): MyFairyInfo? = launchRequest {
api.getMyFairyInfo()
}
suspend fun getFriendsList(): List<SimpleUserInfo>? = launchRequest {
api.getFriendsList()
}
suspend fun askForFairy(elfId: Long, targetUid: Long): String? = launchRequest {
api.askForFairy(elfId, targetUid)
}
suspend fun sendFairy(elfId: Long, targetUid: Long): String? = launchRequest {
api.sendFairy(elfId, targetUid)
}
private interface Api {
@@ -80,7 +100,10 @@ object TreasureFairyModel {
*
*/
@GET("act/seize-treasure/forest/draw/record")
suspend fun getForestRecord(): ServiceResult<List<PrizeInfo>>
suspend fun getForestRecord(
@Query("page") page: Int,
@Query("pageSize") pageSize: Int
): ServiceResult<List<PrizeInfo>>
/**
*
@@ -97,6 +120,45 @@ object TreasureFairyModel {
*/
@GET("act/seize-treasure/user/forest/info")
suspend fun getForestInfo(): ServiceResult<ForestInfo>
/**
*
* 获取我的精灵信息
*
*/
@GET("act/seize-treasure/elf/user/info")
suspend fun getMyFairyInfo(): ServiceResult<MyFairyInfo>
/**
*
* 好友列表
*
*/
@GET("fans/friend/list")
suspend fun getFriendsList(): ServiceResult<List<SimpleUserInfo>>
/**
* 精灵-索要
*
*/
@FormUrlEncoded
@POST("act/seize-treasure/elf/askFor")
suspend fun askForFairy(
@Field("elfId") elfId: Long,
@Field("targetUid") targetUid: Long
): ServiceResult<String>
/**
* 精灵-赠送
*
*/
@FormUrlEncoded
@POST("act/seize-treasure/elf/send")
suspend fun sendFairy(
@Field("elfId") elfId: Long,
@Field("targetUid") targetUid: Long
): ServiceResult<String>
}
}