完善会员页

This commit is contained in:
wangyu 2026-01-07 10:39:45 +08:00
parent c5213b643f
commit c75006528f
13 changed files with 175 additions and 299 deletions

View File

@ -1,14 +1,11 @@
package com.cheng.bole.ui.fragment.mine.vip package com.cheng.bole.ui.fragment.mine.vip
import android.animation.ValueAnimator
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Color
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import android.window.OnBackInvokedDispatcher
import androidx.activity.addCallback
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.os.BuildCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -26,7 +23,6 @@ import com.cheng.bole.event.PaySuccessEvent
import com.cheng.bole.manager.EventReportManager import com.cheng.bole.manager.EventReportManager
import com.cheng.bole.manager.LoginManager import com.cheng.bole.manager.LoginManager
import com.cheng.bole.manager.UserConfigManager import com.cheng.bole.manager.UserConfigManager
import com.cheng.bole.ui.activity.MainActivity
import com.cheng.bole.ui.dialog.PayTipDialog import com.cheng.bole.ui.dialog.PayTipDialog
import com.cheng.bole.utils.DateUtils import com.cheng.bole.utils.DateUtils
import com.cheng.bole.utils.UrlHelper import com.cheng.bole.utils.UrlHelper
@ -37,7 +33,6 @@ import com.example.base.decoration.GridSpaceItemDecoration
import com.example.base.decoration.SpacesItemDecoration import com.example.base.decoration.SpacesItemDecoration
import com.example.base.extensions.getColor import com.example.base.extensions.getColor
import com.example.base.extensions.gone import com.example.base.extensions.gone
import com.example.base.extensions.onClick
import com.example.base.extensions.toast import com.example.base.extensions.toast
import com.example.base.extensions.visible import com.example.base.extensions.visible
import com.example.base.ui.BaseFragment import com.example.base.ui.BaseFragment
@ -50,27 +45,28 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.disposables.Disposable
import org.jetbrains.anko.sdk27.listeners.onCheckedChange import org.jetbrains.anko.sdk27.listeners.onCheckedChange
import org.jetbrains.anko.sdk27.listeners.onClick
import org.jetbrains.anko.sdk27.listeners.onTouch import org.jetbrains.anko.sdk27.listeners.onTouch
import org.jetbrains.anko.startActivity
import java.text.DecimalFormat import java.text.DecimalFormat
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() { class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
private val origin by lazy { arguments?.getString("origin") ?: "center" } private val origin by lazy { arguments?.getString("origin") ?: "center" }
private val isGuide by lazy { origin == "bootpage" }
private val vipType by lazy { arguments?.getInt("vipType") ?: 0 } // 0 个人版 1 企业版 private var vipType = 0 // 0 个人版 1 企业版
private lateinit var api: IWXAPI private lateinit var api: IWXAPI
private var isAgree = false private var isAgree = false
private var payType = 0 //0微信支付 1支付宝支付 private var payType = 0 //0微信支付 1支付宝支付
private var totalPrice = 0f private var totalPrice = 0f
private var lastGoodsPrice = 0f
private var seatPrice = 0f private var seatPrice = 0f
private var seatCount = 0 private var seatCount = 0
private var seatCountLimit = 3 private var seatCountLimit = 3
private val goodsAdapter by lazy { VipMealAdapter() } private var goodsAdapter = VipGoodsAdapter(vipType)
private val userTipsList = mutableListOf<String>() private val userTipsList = mutableListOf<String>()
private val userTipsAdapter by lazy { VipUserTipsAdapter(requireContext(), userTipsList) } private val userTipsAdapter by lazy { VipUserTipsAdapter(requireContext(), userTipsList) }
@ -88,7 +84,7 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
override fun initView() { override fun initView() {
super.initView() super.initView()
setBackColor(R.color.white) setBackColor(R.color.white)
setPageStyle() updatePageStyle()
checkPayType() checkPayType()
binding.rvUserTips.adapter = userTipsAdapter binding.rvUserTips.adapter = userTipsAdapter
@ -108,24 +104,12 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
mViewModel.userInfo() mViewModel.userInfo()
mViewModel.getPayUserTips() mViewModel.getPayUserTips()
mViewModel.getGoodsList(if (vipType == 0) "member" else "corp") mViewModel.getGoodsList(if (vipType == 0) "member" else "corp")
if (vipType == 1) mViewModel.getCorpInfo() mViewModel.getCorpInfo()
} }
@SuppressLint("NotifyDataSetChanged", "SetTextI18n") @SuppressLint("NotifyDataSetChanged", "SetTextI18n")
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
setBackPressed()
mTitleBar?.setNavigationOnClickListener {
if (isGuide) {
EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "icon", pageDuration())
}
if (isGuide) {
requireActivity().startActivity<MainActivity>()
} else {
requireActivity().finish()
}
}
binding.rvUserTips.onTouch { _, _ -> true } binding.rvUserTips.onTouch { _, _ -> true }
goodsAdapter.setOnItemClickListener { _, _, i -> goodsAdapter.setOnItemClickListener { _, _, i ->
@ -150,6 +134,20 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
releasePayType() releasePayType()
} }
binding.btnTab1.onClick {
if (vipType != 0) {
vipType = 0
updatePageStyle()
}
}
binding.btnTab2.onClick {
if (vipType != 1) {
vipType = 1
updatePageStyle()
}
}
binding.ivAdd.onClick { binding.ivAdd.onClick {
seatCount++ seatCount++
setSeatCount() setSeatCount()
@ -249,6 +247,11 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
} }
mViewModel.goodsListLiveData.observe(this) { list -> mViewModel.goodsListLiveData.observe(this) { list ->
goodsAdapter.data.forEach { _ ->
if (binding.rvGoods.itemDecorationCount > 0) {
binding.rvGoods.removeItemDecorationAt(0)
}
}
if (list.size <= 3) { if (list.size <= 3) {
binding.rvGoods.layoutManager = GridLayoutManager(requireContext(), 3) binding.rvGoods.layoutManager = GridLayoutManager(requireContext(), 3)
binding.rvGoods.addItemDecoration(GridSpaceItemDecoration(3, 0, DensityUtils.dp2px(12f))) binding.rvGoods.addItemDecoration(GridSpaceItemDecoration(3, 0, DensityUtils.dp2px(12f)))
@ -256,6 +259,7 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
binding.rvGoods.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) binding.rvGoods.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
binding.rvGoods.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(12f), RecyclerView.HORIZONTAL)) binding.rvGoods.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(12f), RecyclerView.HORIZONTAL))
} }
goodsAdapter.type = vipType
goodsAdapter.setList(list) goodsAdapter.setList(list)
goodsEntity = list.find { it.checked } goodsEntity = list.find { it.checked }
@ -312,24 +316,20 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
EventReportManager.eventReport( EventReportManager.eventReport(
EventConstants.PAY_SUCCESS, EventConstants.PAY_SUCCESS,
if (payType == 0) "weixin" else "alipay", if (payType == 0) "weixin" else "alipay",
"{isGuide:$isGuide, orderId:${orderEntity?.orderId}, meal:${Gson().toJson(goodsEntity)}}" "{orderId:${orderEntity?.orderId}, meal:${Gson().toJson(goodsEntity)}}"
) )
if (isGuide) {
requireActivity().startActivity<MainActivity>()
} else {
RxBus.defaultInstance.post(PaySuccessEvent()) RxBus.defaultInstance.post(PaySuccessEvent())
}
requireActivity().finish() requireActivity().finish()
} }
PayStatusEnum.PAY_CANCEL -> { PayStatusEnum.PAY_CANCEL -> {
toast("已取消支付") toast("已取消支付")
EventReportManager.eventReport(EventConstants.PAY_CANCEL, if (payType == 0) "weixin" else "alipay", "{isGuide:$isGuide, orderId:${orderEntity?.orderId}") EventReportManager.eventReport(EventConstants.PAY_CANCEL, if (payType == 0) "weixin" else "alipay", "{orderId:${orderEntity?.orderId}")
} }
else -> { else -> {
toast("已取消支付") toast("已取消支付")
EventReportManager.eventReport(if (payType == 0) EventConstants.ERROR_CLIENT_WXPAY_ERR else EventConstants.ERROR_CLIENT_ALIPAY_ERR, "{isGuide:$isGuide, orderId:${orderEntity?.orderId}", it.message) EventReportManager.eventReport(if (payType == 0) EventConstants.ERROR_CLIENT_WXPAY_ERR else EventConstants.ERROR_CLIENT_ALIPAY_ERR, "{orderId:${orderEntity?.orderId}", it.message)
} }
} }
} }
@ -430,30 +430,33 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
SpanUtils.with(binding.tvSeatTip2) SpanUtils.with(binding.tvSeatTip2)
.append("当前") .append("当前")
.append("1个") .append("1个")
.setForegroundColor(Color.parseColor("#D6AA58")) .setForegroundColor(getColor(R.color.color_146847))
.append("主号+") .append("主号+")
.append("${seatCount}") .append("${seatCount}")
.setForegroundColor(Color.parseColor("#D6AA58")) .setForegroundColor(getColor(R.color.color_146847))
.append("席位") .append("席位")
.create() .create()
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun setPrice(price: Float) { private fun setPrice(price: Float) {
lastGoodsPrice = totalPrice
totalPrice = if (price < 0) 0f else price totalPrice = if (price < 0) 0f else price
val valueAnim = ValueAnimator.ofFloat(0f, 1f).setDuration(500)
valueAnim.addUpdateListener {
val percent = it.animatedValue as Float
val diffPrice = totalPrice - lastGoodsPrice
val animPrice = if (percent == 1f) totalPrice * percent else (lastGoodsPrice + diffPrice * percent).toInt()
SpanUtils.with(binding.tvPrice) SpanUtils.with(binding.tvPrice)
.append("") .append("")
.setFontSize(13, true) .setFontSize(13, true)
.append(DecimalFormat("0.##").format(totalPrice)) .append(DecimalFormat("0.##").format(animPrice))
.append(formatPricePeriod(goodsEntity!!.value)) .append(formatPricePeriod(goodsEntity!!.value))
.setFontSize(13, true) .setFontSize(13, true)
.create() .create()
val totalOriginPrice = if (vipType == 1) {
goodsEntity!!.origin_price.toFloat() + (seatCount - seatCountLimit) * (goodsEntity?.origin_member_price?.toFloat() ?: 0f)
} else {
goodsEntity!!.origin_price.toFloat()
} }
binding.tvSavedPrice.text = "立省${DecimalFormat("0.##").format(totalOriginPrice - totalPrice)}" valueAnim.start()
} }
private fun formatPricePeriod(value: String): String { private fun formatPricePeriod(value: String): String {
@ -475,10 +478,16 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
return "" return ""
} }
private fun setPageStyle() { private fun updatePageStyle() {
mViewModel.getGoodsList(if (vipType == 0) "member" else "corp")
if (vipType == 0) { if (vipType == 0) {
payTypeCheckedRes = R.mipmap.ic_pay_checked1 payTypeCheckedRes = R.mipmap.ic_pay_checked1
binding.btnTab1.setTextColor(getColor(R.color.color_fff5e6))
binding.btnTab1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shape_vip_tab_checked, 0, 0, 0)
binding.btnTab2.setTextColor(getColor(R.color.color_1b6648))
binding.btnTab2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shape_vip_tab_default, 0, 0, 0)
binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg1) binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg1)
binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg1) binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg1)
binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg1) binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg1)
@ -493,12 +502,19 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg1)
binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg1)
binding.tvPay.setTextColor(Color.parseColor("#080501")) binding.tvPrice.setTextColor(getColor(R.color.color_fff4e6))
binding.tvInvoice.setTextColor(getColor(R.color.color_ecc9ae))
binding.tvPay.setTextColor(getColor(R.color.color_703d27))
binding.layoutSeat.gone() binding.layoutSeat.gone()
} else { } else {
payTypeCheckedRes = R.mipmap.ic_pay_checked2 payTypeCheckedRes = R.mipmap.ic_pay_checked2
binding.btnTab1.setTextColor(getColor(R.color.color_1b6648))
binding.btnTab1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shape_vip_tab_default, 0, 0, 0)
binding.btnTab2.setTextColor(getColor(R.color.color_fff5e6))
binding.btnTab2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shape_vip_tab_checked, 0, 0, 0)
binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg2) binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg2)
binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg2) binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg2)
binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg2) binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg2)
@ -511,7 +527,7 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
SpanUtils.with(binding.tvSeatTip1) SpanUtils.with(binding.tvSeatTip1)
.append("增加") .append("增加")
.append("1个") .append("1个")
.setForegroundColor(Color.parseColor("#146847")) .setForegroundColor(getColor(R.color.color_146847))
.append("席位") .append("席位")
.create() .create()
@ -520,7 +536,9 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg2)
binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg2)
binding.tvPay.setTextColor(Color.WHITE) binding.tvPrice.setTextColor(getColor(R.color.color_f6fbd0))
binding.tvInvoice.setTextColor(getColor(R.color.color_7ead99))
binding.tvPay.setTextColor(getColor(R.color.color_753906))
binding.layoutSeat.visible() binding.layoutSeat.visible()
} }
@ -534,6 +552,7 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
} }
//格式化倒计时 //格式化倒计时
@SuppressLint("DefaultLocale")
private fun setCountdownTime(seconds: Long) { private fun setCountdownTime(seconds: Long) {
val minutes = seconds / 60 val minutes = seconds / 60
val hours = minutes / 60 val hours = minutes / 60
@ -574,31 +593,4 @@ class VipFragment : BaseFragment<FragmentVipBinding, VipViewModel>() {
countdownDisposable?.dispose() countdownDisposable?.dispose()
super.onDestroyView() super.onDestroyView()
} }
@SuppressLint("UnsafeOptInUsageError")
private fun setBackPressed() {
if (BuildCompat.isAtLeastT()) {
requireActivity().onBackInvokedDispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT) {
if (isGuide) {
EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "back", pageDuration())
}
if (isGuide) {
requireActivity().startActivity<MainActivity>()
} else {
requireActivity().finish()
}
}
} else {
requireActivity().onBackPressedDispatcher.addCallback(this) {
if (isGuide) {
EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "back", pageDuration())
}
if (isGuide) {
requireActivity().startActivity<MainActivity>()
} else {
requireActivity().finish()
}
}
}
}
} }

View File

@ -0,0 +1,91 @@
package com.cheng.bole.ui.fragment.mine.vip
import android.annotation.SuppressLint
import android.graphics.Typeface
import android.view.ViewGroup
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.setPadding
import androidx.recyclerview.widget.GridLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.bole.R
import com.cheng.bole.bean.VipGoodsEntity
import com.cheng.bole.common.Constants
import com.example.base.extensions.getColor
import com.example.base.utils.DensityUtils
import com.example.base.utils.SpanUtils
import java.text.DecimalFormat
class VipGoodsAdapter(var type: Int) : BaseQuickAdapter<VipGoodsEntity, BaseViewHolder>(R.layout.listitem_vip_goods) {
override fun convert(holder: BaseViewHolder, item: VipGoodsEntity) {
holder.setGone(R.id.tv_tag, true)
if (item.tips.isNotEmpty()) {
holder.setVisible(R.id.tv_tag, true)
holder.setText(R.id.tv_tag, item.tips)
}
holder.setText(R.id.tv_goods_name, item.goods_name)
holder.getView<TextView>(R.id.tv_goods_name).textSize = if (item.checked) 18f else 12f
holder.getView<TextView>(R.id.tv_goods_name).typeface = if (item.checked) Typeface.DEFAULT_BOLD else Typeface.DEFAULT
SpanUtils.with(holder.getView(R.id.tv_price))
.append("")
.setFontSize(if (item.checked) 12 else 10, true)
.append(DecimalFormat("0.##").format(item.price.toFloat()))
.setFontSize(if (item.checked) 30 else 22, true)
.setTypeface(Constants.dDIN_PRO_M)
.create()
SpanUtils.with(holder.getView(R.id.tv_origin_price))
.append("${item.origin_price}")
.setFontSize(if (item.checked) 13 else 10, true)
.setStrikethrough()
.create()
val layoutContent = holder.getView<ViewGroup>(R.id.layout_content)
val layoutParams = layoutContent.layoutParams as ConstraintLayout.LayoutParams
if (item.checked) {
holder.itemView.setPadding(0)
layoutParams.dimensionRatio = "h,124:134"
layoutContent.layoutParams = layoutParams
if (type == 0) {
holder.setTextColor(R.id.tv_goods_name, getColor(R.color.color_7e4024))
holder.setTextColor(R.id.tv_price, getColor(R.color.color_f11e1e))
holder.setTextColor(R.id.tv_origin_price, getColor(R.color.color_797069))
holder.setBackgroundResource(R.id.layout_content, R.mipmap.ic_personal_goods_checked)
} else {
holder.setTextColor(R.id.tv_goods_name, getColor(R.color.color_c5ffe1))
holder.setTextColor(R.id.tv_price, getColor(R.color.color_f6fbd0))
holder.setTextColor(R.id.tv_origin_price, getColor(R.color.color_779086))
holder.setBackgroundResource(R.id.layout_content, R.mipmap.ic_enterprise_goods_checked)
}
} else {
holder.itemView.setPadding(DensityUtils.dp2px(10f))
layoutParams.dimensionRatio = "h,96:104"
layoutContent.layoutParams = layoutParams
if (type == 0) {
holder.setTextColor(R.id.tv_goods_name, getColor(R.color.color_fffaee))
holder.setTextColor(R.id.tv_price, getColor(R.color.color_fffaee))
holder.setTextColor(R.id.tv_origin_price, getColor(R.color.color_797069))
holder.setBackgroundResource(R.id.layout_content, R.mipmap.ic_personal_goods_default)
} else {
holder.setTextColor(R.id.tv_goods_name, getColor(R.color.color_9eb9ab))
holder.setTextColor(R.id.tv_price, getColor(R.color.color_9eb9ab))
holder.setTextColor(R.id.tv_origin_price, getColor(R.color.color_56665f))
holder.setBackgroundResource(R.id.layout_content, R.mipmap.ic_enterprise_goods_default)
}
}
if (recyclerView.layoutManager is GridLayoutManager) {
holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
} else {
val itemWidth = (recyclerView.width - DensityUtils.dp2px(50f)) / 3
holder.itemView.layoutParams = ViewGroup.LayoutParams(itemWidth, ViewGroup.LayoutParams.MATCH_PARENT)
}
}
}

View File

@ -1,82 +0,0 @@
package com.cheng.bole.ui.fragment.mine.vip
import android.annotation.SuppressLint
import android.graphics.Color
import android.util.TypedValue
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.view.setPadding
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.bole.R
import com.cheng.bole.bean.VipGoodsEntity
import com.cheng.bole.common.Constants
import com.example.base.extensions.getColor
import com.example.base.ui.list.LoadMoreAdapter
import com.example.base.utils.DensityUtils
import com.example.base.utils.SpanUtils
import java.text.DecimalFormat
class VipMealAdapter : LoadMoreAdapter<VipGoodsEntity>(R.layout.listitem_vip_meal) {
@SuppressLint("NotifyDataSetChanged")
override fun convert(holder: BaseViewHolder, item: VipGoodsEntity) {
holder.setGone(R.id.tv_tag, true)
if (item.tips.isNotEmpty()) {
holder.setVisible(R.id.tv_tag, true)
holder.setText(R.id.tv_tag, item.tips)
}
holder.setText(R.id.tv_goods_name, item.goods_name)
SpanUtils.with(holder.getView(R.id.tv_price))
.append("")
.setFontSize(if (item.checked) 12 else 10, true)
.append(DecimalFormat("0.##").format(item.price.toFloat()))
.setFontSize(if (item.checked) 28 else 22, true)
.setTypeface(Constants.dDIN_PRO_M)
.create()
SpanUtils.with(holder.getView(R.id.tv_origin_price))
.append("${item.origin_price}")
.setStrikethrough()
.create()
holder.setText(R.id.tv_save_price, "限时立省¥${DecimalFormat("0.##").format(item.origin_price.toFloat() - item.price.toFloat())}")
holder.setBackgroundResource(R.id.tv_save_price, if (item.checked) R.drawable.shape_vip_meal_checked_bottom_bg else R.drawable.shape_vip_meal_default_bottom_bg)
holder.setBackgroundResource(R.id.layout_content, if (item.checked) R.drawable.shape_vip_meal_check_true else R.drawable.shape_vip_meal_check_false)
holder.getView<TextView>(R.id.tv_tag).setTextSize(TypedValue.COMPLEX_UNIT_SP, if (item.checked) 12f else 10f)
holder.getView<TextView>(R.id.tv_goods_name).setTextSize(TypedValue.COMPLEX_UNIT_SP, if (item.checked) 15f else 12f)
holder.getView<TextView>(R.id.tv_origin_price).setTextSize(TypedValue.COMPLEX_UNIT_SP, if (item.checked) 14f else 10f)
holder.getView<TextView>(R.id.tv_save_price).setTextSize(TypedValue.COMPLEX_UNIT_SP, if (item.checked) 12f else 10f)
if (item.checked) {
holder.itemView.setPadding(0)
holder.getView<ViewGroup>(R.id.layout_content).setPadding(0, DensityUtils.dp2px(9f),0, 0)
holder.getView<TextView>(R.id.tv_tag).setPadding(DensityUtils.dp2px(6f), DensityUtils.dp2px(2f), DensityUtils.dp2px(6f), DensityUtils.dp2px(2f))
holder.getView<TextView>(R.id.tv_save_price).setPadding(0, DensityUtils.dp2px(6f),0, DensityUtils.dp2px(6f))
holder.setTextColor(R.id.tv_goods_name, getColor(R.color.color_54230c))
holder.setTextColor(R.id.tv_price, getColor(R.color.color_f94747))
holder.setTextColor(R.id.tv_origin_price, getColor(R.color.color_896451))
holder.setTextColor(R.id.tv_save_price, getColor(R.color.color_54220b))
} else {
holder.itemView.setPadding(DensityUtils.dp2px(5f), 0, DensityUtils.dp2px(5f),0)
holder.getView<TextView>(R.id.tv_tag).setPadding(DensityUtils.dp2px(4f), DensityUtils.dp2px(1f), DensityUtils.dp2px(4f), DensityUtils.dp2px(1f))
holder.getView<ViewGroup>(R.id.layout_content).setPadding(0, DensityUtils.dp2px(7f),0, 0)
holder.getView<TextView>(R.id.tv_save_price).setPadding(0, DensityUtils.dp2px(4f),0, DensityUtils.dp2px(4f))
holder.setTextColor(R.id.tv_goods_name, Color.parseColor("#ABABAB"))
holder.setTextColor(R.id.tv_price, Color.parseColor("#EAEAEA"))
holder.setTextColor(R.id.tv_origin_price, Color.parseColor("#6B6B6B"))
holder.setTextColor(R.id.tv_save_price, getColor(R.color.color_80ffffff))
}
if (recyclerView.layoutManager is GridLayoutManager) {
holder.itemView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
} else if (recyclerView.layoutManager is LinearLayoutManager) {
holder.itemView.layoutParams =
ViewGroup.LayoutParams(DensityUtils.dp2px(if (item.checked) 125f else 110f), ViewGroup.LayoutParams.MATCH_PARENT)
}
}
}

View File

@ -39,8 +39,8 @@ class VipViewModel : BaseViewModel() {
}) })
} }
fun getGoodsList(type: String) { fun getGoodsList(type: String, showLoading: Boolean = false) {
showDialog() if (showLoading) showDialog()
launchOnUiTryCatch({ launchOnUiTryCatch({
val response = ApiFactory.apiService.getGoodsList(type) val response = ApiFactory.apiService.getGoodsList(type)
if (response.status) { if (response.status) {

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#242529"/>
<corners android:radius="@dimen/dp_8"/>
</shape>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_10" />
<solid android:color="#FFA779" />
<gradient
android:angle="135"
android:endColor="#FFF8F6"
android:startColor="#FFEBDB" />
</shape>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="@dimen/dp_8"
android:bottomRightRadius="@dimen/dp_8" />
<gradient
android:centerColor="#D1CAF9"
android:endColor="#C4DBFA"
android:startColor="#FAE9CA" />
</shape>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="@dimen/dp_8"
android:bottomRightRadius="@dimen/dp_8" />
<solid android:color="#424346" />
</shape>

View File

@ -93,6 +93,7 @@
android:layout_marginTop="@dimen/dp_32" android:layout_marginTop="@dimen/dp_32"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/rv_goods"> app:layout_constraintTop_toBottomOf="@id/rv_goods">
<TextView <TextView
@ -508,31 +509,17 @@
android:textSize="@dimen/sp_24" android:textSize="@dimen/sp_24"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_saved_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_5"
android:text="立省2000"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toTopOf="@id/tv_invoice"
app:layout_constraintStart_toEndOf="@id/tv_price"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/tv_invoice" android:id="@+id/tv_invoice"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_5" android:layout_marginStart="@dimen/dp_7"
android:layout_marginBottom="@dimen/dp_15"
android:text="(可开发票)" android:text="(可开发票)"
android:textColor="@color/color_ecc9ae" android:textColor="@color/color_ecc9ae"
android:textSize="@dimen/sp_10" android:textSize="@dimen/sp_10"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="@id/tv_price"
app:layout_constraintEnd_toEndOf="@id/tv_saved_price" app:layout_constraintStart_toEndOf="@id/tv_price" />
app:layout_constraintStart_toStartOf="@id/tv_saved_price"
app:layout_constraintTop_toBottomOf="@id/tv_saved_price" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,89 +0,0 @@
<?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"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_12"
android:background="@drawable/shape_vip_meal_check_true"
android:clipToOutline="true"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_goods_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:text="月度会员"
android:textColor="@color/color_54230c"
android:textSize="@dimen/sp_16" />
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:singleLine="true"
android:text="25"
android:textColor="@color/color_f94747"
android:textSize="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_origin_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:text="¥39"
android:textColor="@color/color_896451"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_save_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_1"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_1"
android:layout_marginBottom="@dimen/dp_1"
android:background="@drawable/shape_vip_meal_checked_bottom_bg"
android:gravity="center"
android:lines="1"
android:paddingTop="@dimen/dp_4"
android:paddingBottom="@dimen/dp_4"
android:text="立省¥20"
android:textColor="@color/color_54220b"
android:textSize="@dimen/sp_12" />
</androidx.appcompat.widget.LinearLayoutCompat>
<TextView
android:id="@+id/tv_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-12dp"
android:background="@drawable/shape_vip_tag_bg"
android:drawableStart="@mipmap/ic_fire_tag"
android:drawablePadding="@dimen/dp_2"
android:paddingStart="@dimen/dp_6"
android:paddingTop="@dimen/dp_2"
android:paddingEnd="@dimen/dp_6"
android:paddingBottom="@dimen/dp_2"
android:text="限时优惠"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="@id/layout_content"
app:layout_constraintTop_toTopOf="@id/layout_content" />
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 924 B

View File

@ -101,8 +101,16 @@
<color name="color_fff5e6">#FFF5E6</color> <color name="color_fff5e6">#FFF5E6</color>
<color name="color_1b6648">#1B6648</color> <color name="color_1b6648">#1B6648</color>
<color name="color_fffaef">#FFFAEF</color> <color name="color_fffaef">#FFFAEF</color>
<color name="color_fffaee">#FFFAEE</color>
<color name="color_fdf7f0">#FDF7F0</color> <color name="color_fdf7f0">#FDF7F0</color>
<color name="color_fff4e6">#FFF4E6</color> <color name="color_fff4e6">#FFF4E6</color>
<color name="color_f6fbd0">#F6FBD0</color>
<color name="color_779086">#779086</color>
<color name="color_9eb9ab">#9EB9AB</color>
<color name="color_56665f">#56665F</color>
<color name="color_ecc9ae">#ECC9AE</color> <color name="color_ecc9ae">#ECC9AE</color>
<color name="color_7ead99">#7EAD99</color>
<color name="color_703d27">#703D27</color> <color name="color_703d27">#703D27</color>
<color name="color_753906">#753906</color>
<color name="color_146847">#146847</color>
</resources> </resources>