1:将道具商城做成原生的,添加点击的时候展示动效

This commit is contained in:
2026-01-04 17:59:52 +08:00
parent b473751913
commit 3efe9c9146
23 changed files with 1308 additions and 17 deletions

View File

@@ -0,0 +1,200 @@
package com.xscm.modulemain.dialog
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.ActivityUtils.startActivity
import com.blankj.utilcode.util.ToastUtils
import com.xscm.modulemain.activity.user.activity.RechargeActivity
import com.xscm.modulemain.adapter.PurchaseOutfitsAdapter
import com.xscm.modulemain.databinding.DialogPurchaseOutfitsBinding
import com.xscm.moduleutil.bean.DecorateDetailBean
import com.xscm.moduleutil.bean.PersonaltyListBean
import com.xscm.moduleutil.color.ThemeableDrawableUtils
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.utils.ColorManager
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.GiftAnimView
import io.reactivex.disposables.Disposable
/**
* 项目名称:羽声语音
* 时间2026/1/4 9:36
* 用途:装饰详情
*/
class PurchaseOutfitsDialog(context: Context) :
Dialog(context, com.xscm.moduleutil.R.style.BaseDialogStyleH) {
private var mBinding: DialogPurchaseOutfitsBinding =
DialogPurchaseOutfitsBinding.inflate(LayoutInflater.from(context))
var did: String = ""
var personaltyListBean: PersonaltyListBean? = null
var adapter: PurchaseOutfitsAdapter = PurchaseOutfitsAdapter()
private var mSelectedPriceBean: DecorateDetailBean.PriceListBean? = null
private var mCurrentBuyCount: String? = "1"
var imageBg2: GiftAnimView? = null
init {
setContentView(mBinding.root)
setupWindow()
}
private fun setupViews() {
RetrofitClient.getInstance()
.getDecorateDetail(did, object : BaseObserver<DecorateDetailBean>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: DecorateDetailBean) {
if (t != null && t.decorate != null && t.userInfo != null) {
mBinding.tvRewardGift.text = t.userInfo!!.userCoin.toString()
mBinding.tvOutfitsN.text = t.decorate!!.title
// 2. 初始化RecyclerView
mBinding.rvOutfits.layoutManager = LinearLayoutManager(context)
val adapterDataList = t.convertToAdapterData(t.decorate, 0)
mBinding.rvOutfits.adapter = adapter
adapter.setData(
adapterDataList as MutableList<DecorateDetailBean.DecorateAdapterItem>,
t.decorate!!.priceList.isEmpty()
)
} else {
dismiss()
}
}
})
}
fun show(item: PersonaltyListBean?) {
personaltyListBean = item
did = item?.did.toString()
super.show()
initView()
setupViews()
}
private fun setupWindow() {
val window = window ?: return
window.setGravity(Gravity.BOTTOM)
window.setLayout(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
window.setBackgroundDrawableResource(android.R.color.transparent)
val params = window.attributes
params.windowAnimations = com.xscm.moduleutil.R.style.BaseDialogStyleH
window.attributes = params
}
fun initView() {
setCancelable(true)
setCanceledOnTouchOutside(true)
ThemeableDrawableUtils.setThemeableRoundedBackground(
mBinding.tvOutfitsQd,
ColorManager.getInstance().primaryColorInt,
53
)
mBinding.tvOutfitsQd.setTextColor(ColorManager.getInstance().buttonColorInt)
imageBg2 = GiftAnimView(context)
val parentLayout = mBinding.ccl.parent as ViewGroup // 或者其他合适的父布局
parentLayout.post {
val parentWidth = parentLayout.width
val parentHeight = parentLayout.height
imageBg2!!.layoutParams = ViewGroup.LayoutParams(parentWidth, parentHeight)
}
imageBg2!!.visibility = View.GONE
parentLayout.addView(imageBg2)
// 设置确认按钮点击事件
mBinding.tvOutfitsQd.setOnClickListener {
RetrofitClient.getInstance().payDecorate(
did,
mSelectedPriceBean?.day.toString(),
mCurrentBuyCount,
object : BaseObserver<String>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
ToastUtils.showLong("购买成功")
dismiss()
}
});
}
mBinding.cz.setOnClickListener {
//充值
startActivity(Intent(context, RechargeActivity::class.java))
}
if (personaltyListBean != null) {
if (personaltyListBean?.type == 12) {
mBinding.ivOutfits.visibility = View.GONE
mBinding.imJsk.visibility = View.VISIBLE
mBinding.imageHeadPortrait.visibility= View.GONE
mBinding.imQp.visibility=View.GONE
ImageUtils.loadHead(personaltyListBean?.base_image, mBinding.imJsk)
}else if (personaltyListBean?.type == 9) {
mBinding.ivOutfits.visibility = View.GONE
mBinding.imJsk.visibility = View.GONE
mBinding.imageHeadPortrait.visibility= View.GONE
mBinding.imQp.visibility=View.VISIBLE
ImageUtils.loadHead(personaltyListBean?.base_image, mBinding.imQp)
} else {
mBinding.ivOutfits.visibility = View.VISIBLE
mBinding.imJsk.visibility = View.GONE
mBinding.imQp.visibility=View.GONE
ImageUtils.loadHead(personaltyListBean?.base_image, mBinding.ivOutfits)
if (personaltyListBean?.type == 1) {
mBinding.imageHeadPortrait.visibility= View.VISIBLE
imageBg2!!.visibility = View.GONE
mBinding.imageHeadPortrait.stopAll()
mBinding.imageHeadPortrait.setSource(personaltyListBean?.play_image, 2)
}else if (personaltyListBean?.type == 2) {
mBinding.imageHeadPortrait.visibility= View.GONE
imageBg2!!.visibility = View.VISIBLE
imageBg2!!.previewEffectWith(personaltyListBean?.play_image)
}
}
mBinding.tvOutfitsName.text = personaltyListBean?.title
}
adapter.setOnDurationOptionSelectedListener(object :
PurchaseOutfitsAdapter.OnDurationOptionSelectedListener {
override fun onDurationSelected(
selectedPos: Int,
selectedPriceItem: DecorateDetailBean.PriceListBean,
allPriceOptions: List<DecorateDetailBean.PriceListBean>,
) {
mSelectedPriceBean = selectedPriceItem
}
override fun onBuyCountChange(count: Int) {
mCurrentBuyCount = count.toString()
}
})
}
}