1:修改我的页面

2:添加爵位功能
This commit is contained in:
2025-11-12 11:34:34 +08:00
parent f5aeeb88d7
commit ec58f46bf8
382 changed files with 12618 additions and 2597 deletions

View File

@@ -16,13 +16,14 @@ import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.TextUtils
import android.text.style.ForegroundColorSpan
import android.util.DisplayMetrics
import android.util.Log
import android.view.*
import android.view.animation.Animation
import android.view.animation.DecelerateInterpolator
import android.view.animation.TranslateAnimation
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.*
import androidx.activity.OnBackPressedCallback
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
@@ -32,10 +33,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.*
import com.blankj.utilcode.util.GsonUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ThreadUtils
import com.blankj.utilcode.util.TimeUtils
import com.chad.library.adapter.base.BaseQuickAdapter
import com.example.moduleroom.R
@@ -52,6 +51,7 @@ import com.liulishuo.okdownload.OkDownloadProvider
import com.orhanobut.logger.Logger
import com.petterp.floatingx.assist.helper.FxScopeHelper
import com.petterp.floatingx.listener.control.IFxControl
import com.sunfusheng.marqueeview.DisplayUtil
import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMSDKListener
import com.tencent.imsdk.v2.V2TIMUserFullInfo
@@ -87,8 +87,10 @@ import com.xscm.moduleutil.rtc.AgoraManagerEx
import com.xscm.moduleutil.rtc.MusicPlayBean
import com.xscm.moduleutil.service.MyRoomSingleton
import com.xscm.moduleutil.utils.*
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.utils.roomview.GiftDisplayManager
import com.xscm.moduleutil.widget.*
import com.xscm.moduleutil.widget.ViewUtils
import com.xscm.moduleutil.widget.ViewUtils.OnViewCreatedListener
import com.xscm.moduleutil.widget.floatingView.Floa
import io.agora.musiccontentcenter.Music
@@ -558,6 +560,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
// 初始化礼物管理器
GiftDisplayManager.getInstance().setupDisplayView(mBinding!!.giftContainer)
initPublicScreenFragment()
}
@@ -624,10 +627,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding!!.roomTop.tvNum.text = number.toString() + ""
setviewyc(true)
initPublicScreenFragment()
// 确保Fragment已完全初始化后再调用getUpRoomInfo
if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) {
publicScreenFragment!!.getUpRoomInfo(resp)
publicScreenFragment!!.upRoomInfo(resp)
}
if (!isFinishing && !isDestroyed) {
resetFragment()
@@ -696,12 +699,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding!!.rlMisc.visibility = View.GONE
}
setupEffectView()
// 使用Handler延迟执行确保Fragment视图已完全创建
Handler(Looper.getMainLooper()).post {
if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) {
publicScreenFragment!!.getUpRoomInfo(resp)
}
}
if (mRoomInfoResp!!.gift_cycle != null && mRoomInfoResp!!.gift_cycle.xlh_info != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status == "1") {
mBinding?.xlhRk?.visibility = View.VISIBLE
@@ -720,7 +717,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
private fun checkAndRestoreMinimizeState() {
val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE)
val prefs = getSharedPreferences("room_minimize_state", MODE_PRIVATE)
var isMinimized = prefs.getBoolean("is_minimized", false)
if (isMinimized) {
@@ -1184,7 +1181,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
override fun initData() {
if (!EasyPermissions.hasPermissions(this, *permissions)) {
PermissionDescriptionHelper.addPermissionDescription(false,mBinding?.root as ViewGroup,permissions)
PermissionDescriptionHelper.addPermissionDescription(false, mBinding?.root as ViewGroup, permissions)
EasyPermissions.requestPermissions(
this, "请开启录音使用权限",
1, *permissions
@@ -1240,7 +1237,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
this, LinearLayoutManager.HORIZONTAL, false
)
likeUserAdapter = LikeUserAdapter()
mBinding!!.roomTop.userRecyclerView.adapter = likeUserAdapter
mBinding?.roomTop?.userRecyclerView?.adapter = likeUserAdapter
likeUserAdapter!!.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { adapter, view, position ->
// RoomOnlineDialogFragment.show(roomId, "", mRoomUserBean, mRoomInfoResp, getSupportFragmentManager());
@@ -1342,13 +1339,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
private fun initPublicScreenFragment() {
// 检查是否已经存在 Fragment 实例(例如在配置更改后)
publicScreenFragment = supportFragmentManager
.findFragmentById(R.id.ease_container) as PublicScreenEaseChatFragment?
// 如果不存在,则创建新的实例
if (publicScreenFragment == null) {
publicScreenFragment = PublicScreenEaseChatFragment.newInstance(roomId)
publicScreenFragment = PublicScreenEaseChatFragment.newInstance(mRoomInfoResp)
supportFragmentManager.beginTransaction()
.replace(R.id.ease_container, publicScreenFragment!!)
.commitAllowingStateLoss()
@@ -1436,7 +1430,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if (msgType == 1011) {
handleMsgType1011(messageEvent, text)
} else if (msgType == 1001) {
handleMsgType1001()
handleMsgType1001(messageEvent)
} else if (msgType == 1002) {
handleMsgType1002(messageEvent, text)
} else if (msgType == 1029) {
@@ -1702,11 +1696,14 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
toPitNumber: String,
messageEvent: RoomMessageEvent
) {
mRoomInfoResp!!.user_info.pit_number = Integer.parseInt(toPitNumber)
if ("9" == toPitNumber && messageEvent.text.user_id.equals(SpUtil.getUserId().toString())) {
if ("9" == toPitNumber && messageEvent.text.fromUserInfo.user_id == SpUtil.getUserId()) {
mRoomInfoResp!!.user_info.pit_number = Integer.parseInt(toPitNumber)
mBinding!!.roomTop.rl.visibility = View.VISIBLE
ivSoundEffects(true)
} else {
if (customMusicFloatingView != null) {
customMusicFloatingView!!.destroy()
@@ -1740,6 +1737,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
if (mRoomInfoResp!!.user_info.pit_number == 9) {
mBinding!!.roomTop.rl.visibility = View.VISIBLE
ivSoundEffects(true)
setRoleType(3, 9)
}
}
@@ -1871,10 +1869,8 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
aBoolean = false
ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up)
setBoolean(aBoolean)
if (mRoomInfoResp!!.user_info != null) {
mRoomInfoResp!!.user_info.pit_number =
pitNumber?.toInt() ?: -1
}
mRoomInfoResp?.user_info?.pit_number =
pitNumber?.toInt() ?: -1
setRoleType(3, pitNumber!!.toInt())
switchMic(2)
}
@@ -1893,21 +1889,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if ("3" == typeId || "4" == typeId || "1" == typeId || "8" == typeId) {
val labelId = mRoomInfoResp!!.room_info.label_id
if ("2" == labelId) {
// val pitBean = RoomPitBean()
// pitBean.pit_number = messageEvent.text.pit_number
// pitBean.user_id = messageEvent.text.fromUserInfo.user_id.toString() + ""
// pitBean.avatar = messageEvent.text.fromUserInfo.avatar
// pitBean.nickname = messageEvent.text.fromUserInfo.nickname
// pitBean.sex = messageEvent.text.fromUserInfo.sex.toString() + ""
// pitBean.charm = messageEvent.text.fromUserInfo.charm
// pitBean.dress = messageEvent.text.fromUserInfo.dress
//
// if (pitBean.pit_number == "9") {
// val roomDefaultWheatView: RoomKtvWheatView = mBinding?.roomTop!!.muZc
// roomDefaultWheatView.setData(pitBean)
// }
roomFragment!!.KtvFragmentEvent(messageEvent)
} else if ("1" == labelId) {
mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt() - 1, getPitBean(messageEvent))
@@ -1922,12 +1903,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else {
roomFragment!!.updateSeatViewExchangedWithPitArray(mRoomInfoResp)
}
// if (pitNumber.equals("9") && mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId()+"")) {
// ivSoundEffects(true);
// } else {
// ivSoundEffects(false);
// }
}
private fun handleMsgType1004(messageEvent: RoomMessageEvent, text: T?) {
@@ -1938,14 +1913,11 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
val pitNumber = text.pit_number
val userId = fromUserInfo.user_id
val currentUserId = SpUtil.getUserId()
if (userId == currentUserId) {
aBoolean = true
ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding)
setBoolean(aBoolean)
if (mRoomInfoResp!!.user_info != null) {
mRoomInfoResp!!.user_info.pit_number = 0
}
mRoomInfoResp?.user_info?.pit_number = 0
setRoleType(0, 0)
switchMic(2)
}
@@ -1969,9 +1941,9 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
if ("9" == pitNumber) {
if (userId == currentUserId) {
mRoomInfoResp!!.room_info.pit_list[0] = getPitBean2(messageEvent, "9")
if (mRoomInfoResp!!.user_info != null) {
mRoomInfoResp!!.user_info.pit_number = 0
}
// if (mRoomInfoResp!!.user_info != null) {
// mRoomInfoResp!!.user_info.pit_number = 0
// }
}
} else if ("888" == pitNumber) {
mRoomInfoResp!!.room_auction = null
@@ -1985,17 +1957,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if ("3" == typeId || "4" == typeId || "1" == typeId || "8" == typeId) {
val labelId = mRoomInfoResp!!.room_info.label_id
if ("2" == labelId) {
// val pitBean = RoomPitBean()
// pitBean.pit_number = messageEvent.text.pit_number
// pitBean.user_id = ""
// pitBean.avatar = ""
// pitBean.nickname = ""
// pitBean.sex = ""
// pitBean.charm = ""
// if (pitBean.pit_number == "9") {
// val roomDefaultWheatView: RoomKtvWheatView = mBinding?.roomTop!!.muZc
// roomDefaultWheatView.setData(pitBean)
// }
roomFragment!!.KtvFragmentEvent(messageEvent)
} else if ("1" == labelId) {
mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt() - 1, getPitBean2(messageEvent, pitNumber))
@@ -2090,10 +2051,125 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
performExitRoom(1);
}
}
private var currentMqttView: View? = null // 正在播放
var decorView: ViewGroup? = null //礼物的
private fun handleMsgType1001() {
number++
mBinding!!.roomTop.tvNum.text = number.toString() + ""
private fun handleMsgType1001(roomMessageEvent: RoomMessageEvent) {
if (roomMessageEvent.text.fromUserInfo.enter_image?.isNotEmpty() == true){
showFloatingMessage(roomMessageEvent.text.fromUserInfo)
}
// number++
// mBinding!!.roomTop.tvNum.text = number.toString() + ""
}
private fun showFloatingMessage(userInfo: UserInfo) {
try {
// 清理之前的视图(如果存在)
if ( currentMqttView?.getParent() != null) {
val parent = currentMqttView?.getParent() as ViewGroup
parent.removeView(currentMqttView)
}
if (decorView == null) {
decorView = getWindow().getDecorView() as ViewGroup?
}
currentMqttView = LayoutInflater.from(this).inflate(R.layout.item_noble_piaoping, null)
val layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
)
layoutParams.topMargin = DisplayUtil.dip2px(this, 300f)
layoutParams.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
currentMqttView?.setLayoutParams(layoutParams)
decorView?.addView(currentMqttView)
currentMqttView?.let { updateFloatingViewData(it, userInfo) }
currentMqttView?.let {
resetAndStartMqttAnimation(it, Runnable {
// 清理当前视图
if (currentMqttView?.getParent() != null) {
val parent = currentMqttView?.getParent() as ViewGroup
parent.removeView(currentMqttView)
}
currentMqttView = null
})
}
} catch (e: java.lang.Exception) {
}
}
private fun resetAndStartMqttAnimation(view: View, onAnimationEnd: Runnable) {
try {
val screenWidth = getScreenWidth()
// 设置初始位置:在屏幕右侧外部(完全不可见)
view.setTranslationX(screenWidth.toFloat())
val enterAnim = TranslateAnimation(
Animation.ABSOLUTE, screenWidth.toFloat(),
Animation.ABSOLUTE, ((screenWidth - SystemUtils.getWidth(316)) / 2).toFloat(),
Animation.ABSOLUTE, 0f,
Animation.ABSOLUTE, 0f
)
enterAnim.setDuration(1500)
enterAnim.setInterpolator(DecelerateInterpolator(2.0f))
enterAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {
}
override fun onAnimationEnd(animation: Animation?) {
// 停留后退出
CommonAppContext.postDelayed(Runnable {
val exitAnim = TranslateAnimation(
Animation.ABSOLUTE, ((screenWidth - SystemUtils.getWidth(316)) / 2).toFloat(),
Animation.ABSOLUTE, -screenWidth.toFloat(),
Animation.ABSOLUTE, 0f,
Animation.ABSOLUTE, 0f
)
exitAnim.setDuration(3000)
exitAnim.setInterpolator(DecelerateInterpolator(2f))
exitAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {
}
override fun onAnimationEnd(animation: Animation?) {
// 移除视图并处理下一个
onAnimationEnd.run()
}
override fun onAnimationRepeat(animation: Animation?) {
}
})
view.startAnimation(exitAnim)
}, 5000) // 停留1秒
}
override fun onAnimationRepeat(animation: Animation?) {
}
})
view.startAnimation(enterAnim)
} catch (e: java.lang.Exception) {
LogUtils.e("MQTT动画启动失败", e)
onAnimationEnd.run()
}
}
private fun getScreenWidth(): Int {
val displayMetrics = DisplayMetrics()
if (getWindowManager() != null) {
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics)
return displayMetrics.widthPixels
}
return getResources().getDisplayMetrics().widthPixels
}
private fun updateFloatingViewData(view: View, userInfo: UserInfo) {
val textView = view.findViewById<TextView?>(R.id.tv_name)
val im_bj = view.findViewById<ImageView?>(R.id.im_bj)
textView.text = userInfo.enter_text
ImageUtils.loadHeadCC(userInfo.enter_image, im_bj)
}
private fun handleMsgType1002(messageEvent: RoomMessageEvent, text: T?) {
@@ -2658,13 +2734,13 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
// if (mRoomInfoResp!!.room_info.label_id == "1") {
// queren()
// } else {
val fragment = RequestDialogFragment.show(
roomId, mRoomInfoResp, 1,
supportFragmentManager
)
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
val fragment = RequestDialogFragment.show(
roomId, mRoomInfoResp, 1,
supportFragmentManager
)
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
// }
} else if (id == R.id.rl_gift) { //礼物
// RoomGiftDialogFragment.show(mRoomInfoResp, null, roomId, 0, "", getSupportFragmentManager());
@@ -2806,7 +2882,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
if (mRoomInfoResp!!.room_info.label_id != "6") {
val activityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
getSystemService(ACTIVITY_SERVICE) as ActivityManager
val appProcesses =
activityManager.runningAppProcesses ?: return false
@@ -2871,7 +2947,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
private fun saveMinimizeState() {
val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE)
val prefs = getSharedPreferences("room_minimize_state", MODE_PRIVATE)
val editor = prefs.edit()
editor.putString(PREF_MINIMIZED_ROOM, roomId)
editor.putLong(PREF_MINIMIZED_TIME, System.currentTimeMillis())
@@ -2880,7 +2956,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
private fun clearMinimizeState() {
val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE)
val prefs = getSharedPreferences("room_minimize_state", MODE_PRIVATE)
val editor = prefs.edit()
editor.remove(PREF_MINIMIZED_ROOM)
editor.remove(PREF_MINIMIZED_TIME)
@@ -2889,7 +2965,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
private fun wasMinimized(): Boolean {
val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE)
val prefs = getSharedPreferences("room_minimize_state", MODE_PRIVATE)
return prefs.getBoolean("is_minimized", false)
}
@@ -3014,7 +3090,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
val typeId = mRoomInfoResp!!.room_info.type_id
val labelId = mRoomInfoResp!!.room_info.label_id
val userPitNumber = mRoomInfoResp!!.user_info.pit_number
val userPitNumber = mRoomInfoResp?.user_info?.pit_number!!
// 情况1: typeId = 6 时,只显示消息按钮
if ("6" == typeId) {
@@ -3078,14 +3154,17 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
switchMic(2) // 关闭麦克风
}
}
pit_number == 888 -> {
rl_mic?.visibility = View.VISIBLE
switchMic(2) // 关闭麦克风
}
pit_number == -1 -> {
rl_mic?.visibility = View.VISIBLE
switchMic(1) // 打开麦克风
}
else -> {
rl_mic?.visibility = View.GONE
switchMic(2) // 关闭麦克风
@@ -3102,7 +3181,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
if ("1" != typeId) {
rl_more?.visibility = View.GONE
}
if ("1"==typeId && "2" == labelId){
if ("1" == typeId && "2" == labelId) {
rl_misc?.visibility = View.VISIBLE
}
}
@@ -3215,7 +3294,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
dialog.setOnShowListener {
etContent.requestFocus()
val imm =
OkDownloadProvider.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
OkDownloadProvider.context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(etContent, InputMethodManager.SHOW_IMPLICIT)
}
if (inputSting != null) {
@@ -3468,8 +3547,8 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
ivSoundEffects(false)
}
// }
if (mRoomInfoResp!!.user_info.user_id == SpUtil.getUserId()
.toString() + "" && mRoomInfoResp!!.user_info.pit_number == 9 && mRoomInfoResp!!.room_info.type_id == "1" && mRoomInfoResp!!.room_info.label_id != "1"
if (mRoomInfoResp?.user_info?.user_id == SpUtil.getUserId()
.toString() + "" && mRoomInfoResp?.user_info?.pit_number == 9 && mRoomInfoResp?.room_info?.type_id == "1" && mRoomInfoResp?.room_info?.label_id != "1"
) {
rlMore(true)
} else {
@@ -4144,6 +4223,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
GiftDisplayManager.getInstance().clearAll()
mBinding!!.giftContainer.removeAllViews()
CommonAppContext.getInstance().isMai = false
CommonAppContext.getInstance().playId = null
// 确保父类的 onDestroy 被调用
super.finish()
}
@@ -4415,7 +4495,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
* @return 服务是否正在运行
*/
private fun isServiceExisted(context: Context, serviceName: String): Boolean {
val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val manager = context.getSystemService(ACTIVITY_SERVICE) as ActivityManager
if (manager != null) {
val runningServices = manager.getRunningServices(Int.MAX_VALUE)
for (serviceInfo in runningServices) {

View File

@@ -40,17 +40,16 @@ import com.xscm.moduleutil.bean.GiftBean;
import com.xscm.moduleutil.bean.RoomMessageEvent;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.bean.room.EMMessageInfo;
import com.xscm.moduleutil.bean.room.EmotionDeatils;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.MeHeadView;
import com.xscm.moduleutil.utils.logger.Logger;
import com.xscm.moduleutil.widget.AdaptiveImageView;
import com.xscm.moduleutil.widget.GifAvatarOvalView;
import com.xscm.moduleutil.widget.img.BubbleBackgroundHelper;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
@@ -215,9 +214,11 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
emojiImageView.setVisibility(View.VISIBLE);
helper.getView(com.xscm.moduleutil.R.id.tv_content).setVisibility(View.GONE);
ImageUtils.loadHeadCC(emMessage.getText().getFromUserInfo().getAvatar(), helper.getView(com.xscm.moduleutil.R.id.avatar));
MeHeadView avatar = helper.getView(com.xscm.moduleutil.R.id.avatar);
avatar.setData(emMessage.getText().getFromUserInfo().getAvatar(), "", emMessage.getText().getFromUserInfo().getNobility_image());
// ImageUtils.loadHeadCC(emMessage.getText().getFromUserInfo().getAvatar(), helper.getView(com.xscm.moduleutil.R.id.avatar));
helper.setText(com.xscm.moduleutil.R.id.tv_name, emMessage.getText().getFromUserInfo().getNickname());
helper.setTextColor(com.xscm.moduleutil.R.id.tv_name, emMessage.getText().getFromUserInfo().getNickname_color()!=null && !emMessage.getText().getFromUserInfo().getNickname_color().isEmpty()? Color.parseColor(emMessage.getText().getFromUserInfo().getNickname_color()):Color.parseColor("#CCA882"));
if (emMessage.getText().getText() != null) {
helper.setText(com.xscm.moduleutil.R.id.tv_content, getSpannable(emMessage));
}
@@ -275,10 +276,16 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
// 为每个加载任务设置唯一标识
String uniqueId = emMessage.getRoomId() + "_" + helper.getLayoutPosition();
emojiImageView.setTag(uniqueId);
//这段代码使用 Optional 链式调用安全地获取 emMessage 中的 animate_image 字段,避免空指针异常。如果任意环节为 null则返回空字符串。
String animateImage = Optional.ofNullable(emMessage)
.map(RoomMessageEvent::getText)
.map(RoomMessageEvent.T::getEmoji)
.map(EmotionDeatils::getAnimate_image)
.orElse("");
if (Objects.equals(emMessage.getText().getEmoji().getAnimate_image(), "") ||
emMessage.getText().getEmoji().getAnimate_image().isEmpty()) {
// if (Objects.equals(emMessage.getText().getEmoji().getAnimate_image(), "") ||
// emMessage.getText().getEmoji().getAnimate_image().isEmpty()) {
if (!animateImage.isEmpty()){
// 检查视图是否仍属于当前数据项
if (uniqueId.equals(emojiImageView.getTag())) {
ImageUtils.loadHeadCC(emMessage.getText().getEmoji().getImage(), emojiImageView);
@@ -286,35 +293,42 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
return;
}
// 使用 RequestListener 监听加载完成
Glide.with(mContext)
.load(emMessage.getText().getEmoji().getAnimate_image())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target,
DataSource dataSource, boolean isFirstResource) {
// 检查视图是否仍属于当前数据项
if (uniqueId.equals(emojiImageView.getTag())) {
// 加载完成后执行
new Handler().postDelayed(() -> {
// 再次检查视图状态
if (uniqueId.equals(emojiImageView.getTag())) {
Glide.with(mContext)
.load(emMessage.getText().getEmoji().getImage())
.into(emojiImageView);
}
}, 1500);
if (!emMessage.getText().getEmoji().getAnimate_image().isEmpty()) {
// 使用 RequestListener 监听加载完成
Glide.with(mContext)
.load(emMessage.getText().getEmoji().getAnimate_image())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target,
DataSource dataSource, boolean isFirstResource) {
// 检查视图是否仍属于当前数据项
if (uniqueId.equals(emojiImageView.getTag())) {
// 加载完成后执行
new Handler().postDelayed(() -> {
// 再次检查视图状态
if (uniqueId.equals(emojiImageView.getTag())) {
Glide.with(mContext)
.load(emMessage.getText().getEmoji().getImage())
.into(emojiImageView);
}
}, 1500);
}
return false;
}
return false;
}
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target,
boolean isFirstResource) {
return false;
}
})
.into(emojiImageView);
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target,
boolean isFirstResource) {
return false;
}
})
.into(emojiImageView);
}else {
Glide.with(mContext)
.load(emMessage.getText().getEmoji().getImage())
.into(emojiImageView);
}
} else {
helper.getView(com.xscm.moduleutil.R.id.tv_content).setVisibility(View.VISIBLE);
emojiImageView.setVisibility(View.GONE);
@@ -579,7 +593,7 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
public void onViewRecycled(@NonNull BaseViewHolder holder) {
Logger.e("onViewRecycled", "onViewRecycled");
// AdaptiveImageView imEmj = (AdaptiveImageView)holder.getView(com.xscm.moduleutil.R.id.im_emj);
GifAvatarOvalView avatarOvalView = holder.getView(com.xscm.moduleutil.R.id.avatar);
MeHeadView avatarOvalView = holder.getView(com.xscm.moduleutil.R.id.avatar);
ImageView ivNobility = holder.getView(com.xscm.moduleutil.R.id.iv_nobility);
ImageView ivCharm = holder.getView(com.xscm.moduleutil.R.id.iv_charm);
@@ -598,7 +612,6 @@ public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, Ba
// 清理其他图片
if (avatarOvalView != null) {
avatarOvalView.setImageDrawable(null);
Glide.with(avatarOvalView.getContext()).clear(avatarOvalView);
}
if (ivNobility != null) {

View File

@@ -1,11 +1,15 @@
package com.example.moduleroom.adapter;
import android.view.View;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.hjq.toast.ToastUtils;
import com.xscm.moduleutil.bean.room.EmotionDeatils;
import com.xscm.moduleutil.utils.ImageUtils;
import static android.view.View.GONE;
public class EmotionAdapter extends BaseQuickAdapter<EmotionDeatils, BaseViewHolder> {
// 转换后的 Java 代码
private OnEmotionClickListener onEmotionClickListener;
@@ -28,9 +32,17 @@ public class EmotionAdapter extends BaseQuickAdapter<EmotionDeatils, BaseViewHol
protected void convert(BaseViewHolder helper, EmotionDeatils item) {
ImageUtils.loadHeadCC(item.getImage(), helper.getView(R.id.iv_emotion));
helper.setText(R.id.tv_emotion_name, item.getName());
if (item.is_lock()==0){
helper.setVisible(R.id.iv_select,false);
}else {
helper.setVisible(R.id.iv_select,true);
}
// 设置点击事件
helper.itemView.setOnClickListener(v -> {
if (item.is_lock()==1){
ToastUtils.show("当前属于爵位专属,请先开通爵位");
return;
}
if (onEmotionClickListener != null) {
onEmotionClickListener.onEmotionClick(item);
}

View File

@@ -362,7 +362,6 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
// 点击“取消”按钮时什么都不做
}, false, 0).show();
}
private void upAdapter() {
adapter.notifyDataSetChanged();
}

View File

@@ -6,6 +6,7 @@ import static android.view.View.VISIBLE;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.NonNull;
@@ -399,9 +400,16 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
// userInfo.setAuction_id(isNum+"");
// }
// ImageUtils.loadHeadCC(userInfo.getAvatar(), mBinding.ivAvatar);
mBinding.ivAvatar.setData(userInfo.getAvatar(), "", userInfo.getSex() + "");
mBinding.ivAvatar.setData(userInfo.getAvatar(), "", userInfo.getNobility_image() + "");
// mBinding.tvName.setText(userInfo.getNickname());
String sex = userInfo.getSex()==1?"":"";
mBinding.tvId.setText(sex+" | ID:"+userInfo.getUser_code());
mBinding.tvName.setText(userInfo.getNickname());
mBinding.tvId.setText("ID:" + userInfo.getUser_code());
mBinding.tvName.setTextColor( (userInfo.getNickname_color()!=null && !userInfo.getNickname_color().equals(""))? Color.parseColor(userInfo.getNickname_color()):Color.parseColor("#333333"));
// mBinding.tvId.setText( "ID:" + userInfo.getUser_code());
if (userInfo.getIs_in_pit() == 1) {
mBinding.roomMCz.setText("下麦");
} else {

View File

@@ -1349,6 +1349,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
pitBean.setSex(message.getText().getFromUserInfo().getSex() + "");
pitBean.setCharm(message.getText().getFromUserInfo().getCharm());
pitBean.setDress(message.getText().getFromUserInfo().getDress());
pitBean.setMic_cycle(message.getText().getFromUserInfo().getMic_cycle()!=null?message.getText().getFromUserInfo().getMic_cycle():"");
roomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(message.getText().getPit_number()) - 1, pitBean);
if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) {
// if (pitBean.getPit_number().equals("9")){
@@ -1392,6 +1393,7 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
pitBean.setSex("");
pitBean.setCharm("");
pitBean.setDress("");
pitBean.setMic_cycle("");
roomInfoResp.getRoom_info().getPit_list().set(Integer.parseInt(message.getText().getPit_number()) - 1, pitBean);
if (roomInfoRespPk == null || roomInfoRespPk.getPk_info() == null) {
// if (pitBean.getPit_number().equals("9")){

View File

@@ -68,7 +68,7 @@
android:layout_height="@dimen/dp_320"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_6"
android:layout_marginEnd="@dimen/dp_3"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/bt_sta">
@@ -78,7 +78,6 @@
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/dp_4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@mipmap/pk_left"
@@ -119,6 +118,7 @@
android:id="@+id/cl_right"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginStart="@dimen/dp_3"
android:layout_height="match_parent"
app:layout_constraintStart_toEndOf="@+id/cl_left"
app:layout_constraintTop_toTopOf="parent"

View File

@@ -1,10 +1,10 @@
<?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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_85"
xmlns:tools="http://schemas.android.com/tools"
android:padding="8dp">
>
<ImageView
android:id="@+id/iv_emotion"
@@ -15,6 +15,7 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/dp_10"
app:layout_constraintTop_toTopOf="parent" />
<TextView
@@ -31,4 +32,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_emotion" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"
android:src="@mipmap/noble_is_lock"
android:scaleType="fitCenter"
android:id="@+id/iv_select"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,34 @@
<?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:layout_width="@dimen/dp_208"
android:layout_height="@dimen/dp_50"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/im_bj"
android:layout_width="@dimen/dp_208"
android:layout_height="match_parent"
android:scaleType="fitXY"
tools:src="@mipmap/gift_p_b"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="70dp"
android:layout_marginEnd="@dimen/dp_10"
android:ellipsize="start"
android:maxLines="1"
tools:text="礼品"
android:textColor="#fff"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/im_bj"
app:layout_constraintStart_toStartOf="@+id/im_bj"
app:layout_constraintTop_toTopOf="@+id/im_bj"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -108,7 +108,8 @@
android:gravity="center"
android:text="0"
android:textColor="@color/white"
android:textSize="@dimen/sp_12" />
android:textSize="@dimen/sp_12"
android:visibility="gone"/>
<ImageView