主播评级:私聊回复率展示优化

This commit is contained in:
huangjian
2023-02-20 14:44:56 +08:00
parent e4637305fa
commit dfe2f0d1c9
4 changed files with 62 additions and 103 deletions

View File

@@ -49,8 +49,8 @@ class AnchorGradeDialog : BaseDialog<DialogAnchorGradeBinding>() {
} }
override var width: Int = WindowManager.LayoutParams.MATCH_PARENT override var width: Int = ScreenUtil.dip2px(300f)
override var height: Int = WindowManager.LayoutParams.WRAP_CONTENT override var height: Int = ScreenUtil.dip2px(280f)
private val meViewModel: MeViewModel by viewModels() private val meViewModel: MeViewModel by viewModels()
@@ -64,6 +64,7 @@ class AnchorGradeDialog : BaseDialog<DialogAnchorGradeBinding>() {
anchorDrawableResIds[it.grade.uppercase(Locale.getDefault())]?.let { resId -> anchorDrawableResIds[it.grade.uppercase(Locale.getDefault())]?.let { resId ->
binding.ivCurrLevel.setImageResource(resId) binding.ivCurrLevel.setImageResource(resId)
} }
binding.tvCurrentGrade.text = it.currentGrade
setupDiamond(it) setupDiamond(it)
setupReply(it) setupReply(it)
@@ -183,80 +184,43 @@ class AnchorGradeDialog : BaseDialog<DialogAnchorGradeBinding>() {
if (!it.satisfyReply) { if (!it.satisfyReply) {
binding.groupReply.isVisible = false binding.groupReply.isVisible = false
binding.tvSatisfyReply.isVisible = true binding.tvSatisfyReply.isVisible = true
binding.tvReplayTargetNum.isVisible = false
return return
} }
binding.pbReplay.max = 1000 binding.pbReplay.max = 100
binding.tvReplayTargetNum.text = "${(it.currentReply * 100).toInt()}%" binding.tvReplayTargetNum.text = "${(it.currentReply * 100).toInt()}%"
var startEndIDReply = R.id.tv_replay_d when (it.replyRateGrade) {
var endEndIDReply = R.id.tv_replay_c "D" -> {
if (0 <= it.currentReply && it.currentReply < it.levelCReply) { binding.ivReplayLevelD.setImageResource(R.drawable.anchor_grade_ic_level_current)
binding.ivReplayLevelD.setImageResource(R.drawable.anchor_grade_ic_level_current) binding.pbReplay.progress = 0
binding.pbReplay.progress = }
((it.currentReply / it.levelCReply * 250).toInt() "C" -> {
.coerceAtLeast(30)) binding.ivReplayLevelC.setImageResource(R.drawable.anchor_grade_ic_level_current)
.coerceAtMost(220) binding.ivReplayLevelC.isVisible = true
binding.tvReplayGap.text = binding.pbDiamond.progress = 25
"还差${((it.levelCReply - it.currentReply) * 100).toInt()}%" }
} else if (it.levelCReply <= it.currentReply && it.currentReply < it.levelBReply) { "B" -> {
binding.ivReplayLevelC.setImageResource(R.drawable.anchor_grade_ic_level_current) binding.ivReplayLevelB.setImageResource(R.drawable.anchor_grade_ic_level_current)
binding.ivReplayLevelC.isVisible = true binding.ivReplayLevelC.isVisible = true
binding.pbDiamond.progress = binding.ivReplayLevelB.isVisible = true
(((it.currentReply - it.levelCReply) / (it.levelBReply - it.levelCReply) * 250).toInt() binding.pbReplay.progress = 50
.coerceAtLeast(15) + 250) }
.coerceAtMost(485) "A" -> {
startEndIDReply = R.id.tv_replay_c binding.ivReplayLevelA.setImageResource(R.drawable.anchor_grade_ic_level_current)
endEndIDReply = R.id.tv_replay_b binding.ivReplayLevelC.isVisible = true
binding.tvReplayGap.text = binding.ivReplayLevelB.isVisible = true
"还差${((it.levelBReply - it.currentReply) * 100).toInt()}%" binding.ivReplayLevelA.isVisible = true
} else if (it.levelBReply <= it.currentReply && it.currentReply < it.levelAReply) { binding.pbReplay.progress = 75
binding.ivReplayLevelB.setImageResource(R.drawable.anchor_grade_ic_level_current) }
binding.ivReplayLevelC.isVisible = true "S" -> {
binding.ivReplayLevelB.isVisible = true binding.ivReplayLevelS.setImageResource(R.drawable.anchor_grade_ic_level_current)
binding.pbReplay.progress = binding.ivReplayLevelC.isVisible = true
(((it.currentReply - it.levelBReply) / (it.levelAReply - it.levelBReply) * 250).toInt() binding.ivReplayLevelB.isVisible = true
.coerceAtLeast(15) + 500) binding.ivReplayLevelA.isVisible = true
.coerceAtMost(735) binding.ivReplayLevelS.isVisible = true
startEndIDReply = R.id.tv_replay_b binding.pbReplay.progress = binding.pbReplay.max
endEndIDReply = R.id.tv_replay_a }
binding.tvReplayGap.text =
"还差${((it.levelAReply - it.currentReply) * 100).toInt()}%"
} else if (it.levelAReply <= it.currentReply && it.currentReply < it.levelSReply) {
binding.ivReplayLevelA.setImageResource(R.drawable.anchor_grade_ic_level_current)
binding.ivReplayLevelC.isVisible = true
binding.ivReplayLevelB.isVisible = true
binding.ivReplayLevelA.isVisible = true
binding.pbReplay.progress =
(((it.currentReply - it.levelAReply) / (it.levelSReply - it.levelAReply) * 250).toInt()
.coerceAtLeast(30) + 750)
.coerceAtMost(970)
startEndIDReply = R.id.tv_replay_a
endEndIDReply = R.id.tv_replay_s
binding.tvReplayGap.text =
"还差${((it.levelSReply - it.currentReply) * 100).toInt()}%"
} else {
binding.ivReplayLevelS.setImageResource(R.drawable.anchor_grade_ic_level_current)
binding.ivReplayLevelC.isVisible = true
binding.ivReplayLevelB.isVisible = true
binding.ivReplayLevelA.isVisible = true
binding.ivReplayLevelS.isVisible = true
binding.pbReplay.progress = binding.pbReplay.max
binding.tvReplayGap.isGone = true
} }
val constraintSet = ConstraintSet()
constraintSet.clone(binding.clRoot)
constraintSet.connect(
R.id.tv_replay_gap,
ConstraintSet.START,
startEndIDReply,
ConstraintSet.END
)
constraintSet.connect(
R.id.tv_replay_gap,
ConstraintSet.END,
endEndIDReply,
ConstraintSet.START
)
constraintSet.applyTo(binding.clRoot)
} }
override fun onDestroyView() { override fun onDestroyView() {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -15,23 +15,12 @@
android:background="@drawable/anchor_grade_bg" android:background="@drawable/anchor_grade_bg"
android:orientation="vertical"> android:orientation="vertical">
<TextView
android:id="@+id/tv_curr_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="当前评级"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintEnd_toStartOf="@id/iv_curr_level"
app:layout_constraintTop_toTopOf="parent" />
<ImageView <ImageView
android:id="@+id/iv_curr_level" android:id="@+id/iv_curr_level"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="11dp" android:layout_marginTop="11dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="9dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/anchor_grade_ic_level_a" /> tools:src="@drawable/anchor_grade_ic_level_a" />
@@ -46,12 +35,33 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_curr_grade_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="实时评级:"
android:textColor="#ff171a58"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="@id/iv_title"
app:layout_constraintTop_toBottomOf="@id/iv_title" />
<TextView
android:id="@+id/tv_current_grade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#fff86099"
android:textSize="12sp"
app:layout_constraintBaseline_toBaselineOf="@id/tv_curr_grade_text"
app:layout_constraintStart_toEndOf="@id/tv_curr_grade_text"
tools:text="X" />
<TextView <TextView
android:id="@+id/tv_diamond" android:id="@+id/tv_diamond"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:layout_marginTop="25dp" android:layout_marginTop="36dp"
android:text="收礼钻石数:" android:text="收礼钻石数:"
android:textColor="#8A8CAB" android:textColor="#8A8CAB"
android:textSize="11sp" android:textSize="11sp"
@@ -364,19 +374,6 @@
app:layout_constraintStart_toStartOf="@id/iv_replay_level_s" app:layout_constraintStart_toStartOf="@id/iv_replay_level_s"
app:layout_constraintTop_toBottomOf="@id/view_bg_replay_pb" /> app:layout_constraintTop_toBottomOf="@id/view_bg_replay_pb" />
<TextView
android:id="@+id/tv_replay_gap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:fontFamily="sans-serif"
android:textColor="@color/color_babbcd"
android:textSize="10dp"
app:layout_constraintEnd_toEndOf="@id/tv_replay_s"
app:layout_constraintStart_toStartOf="@id/tv_replay_a"
app:layout_constraintTop_toBottomOf="@id/view_bg_replay_pb"
tools:text="还差10%" />
<TextView <TextView
android:id="@+id/tv_satisfy_reply" android:id="@+id/tv_satisfy_reply"
android:layout_width="260dp" android:layout_width="260dp"
@@ -396,7 +393,7 @@
android:id="@+id/group_reply" android:id="@+id/group_reply"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:constraint_referenced_ids="iv_replay_level_d,tv_replay_d,tv_replay_c,tv_replay_b,tv_replay_a,tv_replay_s,pb_replay,view_bg_replay_pb,tv_replay_gap" /> app:constraint_referenced_ids="iv_replay_level_d,tv_replay_d,tv_replay_c,tv_replay_b,tv_replay_a,tv_replay_s,pb_replay,view_bg_replay_pb" />
<ImageView <ImageView
android:id="@+id/iv_update_text" android:id="@+id/iv_update_text"

View File

@@ -10,12 +10,10 @@ data class AnchorGradeInfo(
val uid: Int = 0, val uid: Int = 0,
val inWhitelist: Boolean = false, val inWhitelist: Boolean = false,
val levelSDiamond: Int = 0, val levelSDiamond: Int = 0,
val levelSReply: Double = 0.0,
val levelADiamond: Int = 0, val levelADiamond: Int = 0,
val levelAReply: Double = 0.0,
val levelBDiamond: Int = 0, val levelBDiamond: Int = 0,
val levelBReply: Double = 0.0,
val levelCDiamond: Int = 0, val levelCDiamond: Int = 0,
val levelCReply: Double = 0.0,
val satisfyReply: Boolean = false, val satisfyReply: Boolean = false,
val replyRateGrade: String = "D",
val currentGrade: String = "D",
) )