酒吧 定时器。
This commit is contained in:
@@ -435,6 +435,16 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTime(String time) {
|
||||||
|
if (TextUtils.isEmpty(time)) {
|
||||||
|
tvTime.setText("");
|
||||||
|
tvTime.setVisibility(View.INVISIBLE);
|
||||||
|
} else {
|
||||||
|
tvTime.setText(time);
|
||||||
|
tvTime.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setOnlineStatus() {
|
public void setOnlineStatus() {
|
||||||
if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) {
|
if (pitBean.getUser_id() != null && !pitBean.getUser_id().equals("0") && !pitBean.getUser_id().isEmpty()) {
|
||||||
if (pitBean.getIs_online() == 1) {
|
if (pitBean.getIs_online() == 1) {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.xscm.modulemain.activity.room.fragment
|
package com.xscm.modulemain.activity.room.fragment
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.TextUtils
|
||||||
|
import android.view.View
|
||||||
import com.blankj.utilcode.util.ActivityUtils
|
import com.blankj.utilcode.util.ActivityUtils
|
||||||
import com.blankj.utilcode.util.LogUtils
|
import com.blankj.utilcode.util.LogUtils
|
||||||
import com.xscm.modulemain.R
|
import com.xscm.modulemain.R
|
||||||
@@ -15,6 +17,7 @@ import com.xscm.modulemain.dialog.barRoom.RoomAboutDialog
|
|||||||
import com.xscm.modulemain.dialog.barRoom.RoomDurationDialog
|
import com.xscm.modulemain.dialog.barRoom.RoomDurationDialog
|
||||||
import com.xscm.modulemain.dialog.barRoom.SetupCustomGiftDialog
|
import com.xscm.modulemain.dialog.barRoom.SetupCustomGiftDialog
|
||||||
import com.xscm.modulemain.dialog.barRoom.WishGiftDialog
|
import com.xscm.modulemain.dialog.barRoom.WishGiftDialog
|
||||||
|
import com.xscm.modulemain.utils.CountdownTimer
|
||||||
import com.xscm.modulemain.widget.RoomPubWheatView
|
import com.xscm.modulemain.widget.RoomPubWheatView
|
||||||
import com.xscm.moduleutil.base.BaseMvpFragment
|
import com.xscm.moduleutil.base.BaseMvpFragment
|
||||||
import com.xscm.moduleutil.base.CommonAppContext
|
import com.xscm.moduleutil.base.CommonAppContext
|
||||||
@@ -24,6 +27,11 @@ import com.xscm.moduleutil.bean.room.RoomInfoResp
|
|||||||
import com.xscm.moduleutil.bean.room.RoomUserBean
|
import com.xscm.moduleutil.bean.room.RoomUserBean
|
||||||
import com.xscm.moduleutil.utils.ClickUtils
|
import com.xscm.moduleutil.utils.ClickUtils
|
||||||
import com.xscm.moduleutil.utils.SpUtil
|
import com.xscm.moduleutil.utils.SpUtil
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.SupervisorJob
|
||||||
|
import kotlinx.coroutines.cancel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author
|
* @Author
|
||||||
@@ -58,6 +66,41 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
private val indexList: MutableList<String> =
|
private val indexList: MutableList<String> =
|
||||||
mutableListOf("9", "10", "1", "2", "3", "4", "5", "6")
|
mutableListOf("9", "10", "1", "2", "3", "4", "5", "6")
|
||||||
|
|
||||||
|
|
||||||
|
private val timer = CountdownTimer()
|
||||||
|
private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
||||||
|
|
||||||
|
|
||||||
|
// 在需要开始计时的地方调用
|
||||||
|
private fun startTimer(milliseconds: Long) {
|
||||||
|
LogUtils.e("startTimer: $milliseconds")
|
||||||
|
// 启动计时器
|
||||||
|
timer.startCountdown(milliseconds, scope)
|
||||||
|
// 观察时间变化
|
||||||
|
scope.launch {
|
||||||
|
timer.timeLeft.collect { time ->
|
||||||
|
viewList.forEach { it ->
|
||||||
|
if (it.pitNumber != "9" && it.pitNumber != "10") {
|
||||||
|
if (!TextUtils.isEmpty(it.pitBean.user_id) && !it.pitBean.user_id.equals("0")) {
|
||||||
|
val time =
|
||||||
|
it.pitBean.end_time.toLong() * 1000 - System.currentTimeMillis()
|
||||||
|
if (time <= 0) {
|
||||||
|
it.setTime("00:00")
|
||||||
|
} else {
|
||||||
|
it.setTime(timer.formatTime2(time))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun stopTimer() {
|
||||||
|
timer.stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun initData() {
|
override fun initData() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -80,6 +123,12 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
val bean = mRoomInfoResp?.room_info?.pit_list!![indexList[idx].toInt() - 1]
|
val bean = mRoomInfoResp?.room_info?.pit_list!![indexList[idx].toInt() - 1]
|
||||||
view.setData(bean)
|
view.setData(bean)
|
||||||
|
|
||||||
|
if (idx != 0 && idx != 1) {
|
||||||
|
if (!TextUtils.isEmpty(bean.user_id) && !bean.user_id.equals("0")) {
|
||||||
|
startTimer(bean.end_time.toLong())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
view.iv_custom_gift?.setOnClickListener {
|
view.iv_custom_gift?.setOnClickListener {
|
||||||
GiftGivingDialog(
|
GiftGivingDialog(
|
||||||
ActivityUtils.getTopActivity(),
|
ActivityUtils.getTopActivity(),
|
||||||
@@ -145,7 +194,7 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
} else {
|
} else {
|
||||||
if (view.pitBean.user_id == "0" || view.pitBean.user_id.isEmpty()) {
|
if (view.pitBean.user_id == "0" || view.pitBean.user_id.isEmpty()) {
|
||||||
// TODO: 这是展示设置心愿礼物的,这里有个点,要考虑,当前用户在麦位上,点击的时候,直接走上麦按钮,如果不在麦上,就直接选择心愿礼物
|
// TODO: 这是展示设置心愿礼物的,这里有个点,要考虑,当前用户在麦位上,点击的时候,直接走上麦按钮,如果不在麦上,就直接选择心愿礼物
|
||||||
WishGiftDialog(ActivityUtils.getTopActivity(),mRoomId).show()
|
WishGiftDialog(ActivityUtils.getTopActivity(), mRoomId).show()
|
||||||
// MvpPre!!.applyPit(mRoomInfoResp?.room_info?.room_id!!, view.pitNumber)
|
// MvpPre!!.applyPit(mRoomInfoResp?.room_info?.room_id!!, view.pitNumber)
|
||||||
} else {
|
} else {
|
||||||
RoomUserInfoFragment.show(
|
RoomUserInfoFragment.show(
|
||||||
@@ -223,8 +272,10 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
if (indexList.contains(pitNumber)) {
|
if (indexList.contains(pitNumber)) {
|
||||||
val viewPos = indexList.indexOf(pitNumber)
|
val viewPos = indexList.indexOf(pitNumber)
|
||||||
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
|
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
|
||||||
|
pitBean.end_time = messageEvent.text.end_time
|
||||||
viewList[viewPos].setData(pitBean)
|
viewList[viewPos].setData(pitBean)
|
||||||
}
|
}
|
||||||
|
startTimer(messageEvent.text.end_time.toLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun event1004(messageEvent: RoomMessageEvent) {
|
fun event1004(messageEvent: RoomMessageEvent) {
|
||||||
@@ -234,6 +285,17 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
|
val pitBean = mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1]
|
||||||
viewList[viewPos].setData(pitBean)
|
viewList[viewPos].setData(pitBean)
|
||||||
}
|
}
|
||||||
|
var isMaiPit = false
|
||||||
|
viewList.forEach { it ->
|
||||||
|
if (it.pitNumber != "9" && it.pitNumber != "10") {
|
||||||
|
if (!TextUtils.isEmpty(it.pitBean.user_id) && !it.pitBean.user_id.equals("0")) {
|
||||||
|
isMaiPit = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isMaiPit) {
|
||||||
|
stopTimer()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun event1035(messageEvent: RoomMessageEvent) {
|
fun event1035(messageEvent: RoomMessageEvent) {
|
||||||
@@ -320,4 +382,16 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
viewList.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在Fragment销毁时记得清理资源
|
||||||
|
override fun onDestroy() {
|
||||||
|
super.onDestroy()
|
||||||
|
timer.stop()
|
||||||
|
scope.cancel()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -52,5 +52,24 @@ class CountdownTimer {
|
|||||||
// 4. 格式化:HH/MM/SS 均补0为2位(如 1小时1分5秒 → 01:01:05)
|
// 4. 格式化:HH/MM/SS 均补0为2位(如 1小时1分5秒 → 01:01:05)
|
||||||
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
|
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将毫秒数格式化为 MM:SS 格式的时间字符串
|
||||||
|
* @param milliseconds 毫秒数(支持 0、负数、超大数值)
|
||||||
|
* @return 格式化结果,如 3670000 毫秒 → 01:01:10,125000 毫秒 → 00:02:05
|
||||||
|
*/
|
||||||
|
fun formatTime2(milliseconds: Long): String {
|
||||||
|
// 1. 处理负数/0:转为非负,避免时间为负
|
||||||
|
val nonNegativeMs = if (milliseconds < 0) 0 else milliseconds
|
||||||
|
// 2. 计算总秒数(向下取整,不足1秒按0算)
|
||||||
|
val totalSeconds = (nonNegativeMs / 1000).toInt()
|
||||||
|
// 3. 拆分 小时、分钟、秒
|
||||||
|
val hours = totalSeconds / 3600 // 1小时=3600秒
|
||||||
|
val remainingSecondsAfterHour = totalSeconds % 3600 // 小时剩余秒数
|
||||||
|
val minutes = remainingSecondsAfterHour / 60 // 分钟
|
||||||
|
val seconds = remainingSecondsAfterHour % 60 // 秒
|
||||||
|
// 4. 格式化:HH/MM/SS 均补0为2位(如 1小时1分5秒 → 01:01:05)
|
||||||
|
return String.format("%02d:%02d", minutes, seconds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ class RoomPubWheatView : BaseWheatView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
tv_time?.visibility = View.GONE
|
tv_time?.visibility = View.INVISIBLE
|
||||||
ll_bottom?.visibility = View.GONE
|
ll_bottom?.visibility = View.GONE
|
||||||
iv_custom_gift?.visibility = View.GONE
|
iv_custom_gift?.visibility = View.GONE
|
||||||
}
|
}
|
||||||
@@ -134,7 +134,7 @@ class RoomPubWheatView : BaseWheatView {
|
|||||||
tv_time?.visibility = View.VISIBLE
|
tv_time?.visibility = View.VISIBLE
|
||||||
ll_bottom?.visibility = View.VISIBLE
|
ll_bottom?.visibility = View.VISIBLE
|
||||||
iv_custom_gift?.visibility = View.VISIBLE
|
iv_custom_gift?.visibility = View.VISIBLE
|
||||||
tv_time?.text = "12:34"
|
tv_time?.text = "00:00"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TextUtils.isEmpty(bean.dress)) {
|
if (TextUtils.isEmpty(bean.dress)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user