diff --git a/app/src/main/assets/svga/single_room_pk_pb_indicator.svga b/app/src/main/assets/svga/single_room_pk_pb_indicator.svga new file mode 100644 index 000000000..5d0c16c4e Binary files /dev/null and b/app/src/main/assets/svga/single_room_pk_pb_indicator.svga differ diff --git a/app/src/main/assets/svga/single_room_pk_vs.svga b/app/src/main/assets/svga/single_room_pk_vs.svga new file mode 100644 index 000000000..ea9cb5bd0 Binary files /dev/null and b/app/src/main/assets/svga/single_room_pk_vs.svga differ diff --git a/app/src/main/java/com/yizhuan/erban/avroom/adapter/SingleRoomPKMicroViewAdapter.kt b/app/src/main/java/com/yizhuan/erban/avroom/adapter/SingleRoomPKMicroViewAdapter.kt index 1710655ee..5c6be9f4f 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/adapter/SingleRoomPKMicroViewAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/adapter/SingleRoomPKMicroViewAdapter.kt @@ -4,14 +4,26 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.yizhuan.erban.R +import com.yizhuan.erban.common.widget.CircleImageView +import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.xchat_android_core.bean.RoomQueueInfo +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager +import com.yizhuan.xchat_android_library.utils.config.BasicConfig class SingleRoomPKMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) { + private var isAttention: Boolean = false + + fun setAttention(isAttention: Boolean) { + this.isAttention = isAttention + } + /** * Set LayoutManager and bind this to RecyclerView */ @@ -35,8 +47,47 @@ class SingleRoomPKMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(con inner class SingleAnchorBossMicroViewHolder internal constructor(itemView: View) : NormalMicroViewHolder(itemView) { + private val tvLabelLeaveMode: TextView = itemView.findViewById(R.id.tv_label_leave_mode) + private val ivLeaveMode: CircleImageView = itemView.findViewById(R.id.iv_bg_leave_mode) + private val ivAttention: ImageView = itemView.findViewById(R.id.iv_attention) + public override fun bind(info: RoomQueueInfo, position: Int) { super.bind(info, position) + + // 新版房主位优先判断麦序是否有人,麦序没人再判断是否是离开模式(防止新版展示离开模式,实际麦位有人) + val chatRoomMember = info.mChatRoomMember + val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo + if (chatRoomMember == null) { + if (roomInfo?.isLeaveMode == true || AvRoomDataManager.get().isSingleRoom) { + tvLabelLeaveMode.visibility = View.VISIBLE + ivLeaveMode.visibility = View.VISIBLE + ImageLoadUtils.loadDefaultImage( + BasicConfig.INSTANCE.appContext, + ivLeaveMode, + R.drawable.bg_leave_mode + ) + ivAvatar.visibility = View.VISIBLE + ivLockImage.visibility = View.INVISIBLE + ivUpImage.visibility = View.INVISIBLE + val avRoomDataManager = AvRoomDataManager.get() + ImageLoadUtils.loadAvatar( + BasicConfig.INSTANCE.appContext, + avRoomDataManager.avatar, + ivAvatar + ) + setSelectText(-1, avRoomDataManager.nick, avRoomDataManager.gender) + } else { + ivLeaveMode.visibility = View.GONE + tvLabelLeaveMode.visibility = View.GONE + } + } else { + ivLeaveMode.visibility = View.GONE + tvLabelLeaveMode.visibility = View.GONE + } + ivAttention.setImageResource(if (isAttention) R.drawable.single_room_pk_bg_attentioned else R.drawable.single_room_pk_bg_attention) + ivAttention.setOnClickListener { + //EventBus.getDefault().post() + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java index 792b40637..5abd2194e 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java @@ -277,6 +277,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment + SingleRoomPkReceivedDialog.newInstance((roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean) + .show(mContext) + RoomEvent.ROOM_PK_FINISH -> { + val roomPkBean = + (roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean + if (roomPkBean.isForce) { + SingleRoomPkForceFinishDialog.newInstance(roomPkBean).show(mContext); + } else { + SingleRoomPkFinishDialog.newInstance(roomPkBean).show(mContext); + } + } + } } @@ -251,7 +267,15 @@ class SingleRoomFragment : BaseRoomFragment) { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKBoardView.kt b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKBoardView.kt index 79d63c4fe..e76ebef0b 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKBoardView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKBoardView.kt @@ -16,11 +16,14 @@ import androidx.lifecycle.Observer import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nim.uikit.common.util.sys.TimeUtil import com.yizhuan.erban.R -import com.yizhuan.erban.avroom.adapter.SingleRoomPKMicroViewAdapter +import com.yizhuan.erban.avroom.activity.AVRoomActivity import com.yizhuan.erban.databinding.LayoutSingleRoomPkBoardViewBinding +import com.yizhuan.erban.ui.user.UserInfoActivity +import com.yizhuan.erban.ui.utils.load import com.yizhuan.xchat_android_core.im.custom.bean.RoomPkBean import com.yizhuan.xchat_android_core.manager.AvRoomDataManager import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils +import com.yizhuan.xchat_android_core.utils.subAndReplaceDot import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -39,27 +42,19 @@ class SingleRoomPKBoardView @JvmOverloads constructor( init { addView(binding.root, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) AvRoomDataManager.get().roomPkLiveData.observeForever(observer) + binding.viewRankListContributeRight.showCharmStyle() - /* binding.ivHelp.setOnClickListener { showHelpPopup() } - - binding.ivAvatarLeft.setOnClickListener { - roomPkBean?.let { - RxBus.get().post(ShowUserInfoDialogEvent(it.cUid.toString())) - } - } - - binding.ivAvatarRight.setOnClickListener { - roomPkBean?.let { - RxBus.get().post(ShowUserInfoDialogEvent(it.aUid.toString())) - } - }*/ - - /* binding.tvGoAnotherRoom.setOnClickListener { + binding.ivFindHim.setOnClickListener { roomPkBean?.let { AVRoomActivity.start(context, it.aUid) } - }*/ + } + binding.ivBlueAvatar.setOnClickListener { + roomPkBean?.let { + UserInfoActivity.Companion.start(context, it.aUid) + } + } } @@ -74,9 +69,11 @@ class SingleRoomPKBoardView @JvmOverloads constructor( this.roomPkBean = roomPkBean binding.viewRankListContributeLeft.updateData(roomPkBean?.csRank) - binding.viewRankListContributeRight.updateData(roomPkBean?.asRank) + binding.ivBlueAvatar.load(roomPkBean?.aAvatar) + binding.tvBlueNickname.text = roomPkBean?.aTitle.subAndReplaceDot(7) + binding.pbScore.progress = ((roomPkBean?.cPercent ?: 0.5f) * 100).toInt() val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams layoutParams.horizontalBias = roomPkBean?.cPercent ?: 0.5f @@ -88,13 +85,21 @@ class SingleRoomPKBoardView @JvmOverloads constructor( disposable = Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe { _ -> - binding.tvTime.text = roomPkBean?.endTime?.let { - val remainTime = (it - CurrentTimeUtils.getCurrentTime()).toInt() / 1000 - binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#ff87a1" else "#fff600")) - binding.tvTime.isVisible = remainTime > 0 - binding.tvEndHint.isVisible = remainTime <= 0 - TimeUtil.secToTime(remainTime) - } ?: "00:00" + if (roomPkBean?.pkState == 1) { + binding.tvPk.text = "PK" + binding.tvTime.text = roomPkBean.endTime.let { + val remainTime = (it - CurrentTimeUtils.getCurrentTime()).toInt() / 1000 + binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#ff87a1" else "#fff600")) + TimeUtil.secToTime(remainTime) + } ?: "00:00" + } else { + binding.tvPk.text = "惩罚时间" + binding.tvTime.text = roomPkBean?.penaltyEndTime?.let { + val remainTime = (it - CurrentTimeUtils.getCurrentTime()).toInt() / 1000 + binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#ff87a1" else "#fff600")) + TimeUtil.secToTime(remainTime) + } ?: "00:00" + } } } diff --git a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKRankListView.kt b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKRankListView.kt index ca3092ac5..8855d7ae8 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKRankListView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/singleroompk/SingleRoomPKRankListView.kt @@ -5,6 +5,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import androidx.core.view.isGone +import androidx.core.view.isInvisible +import androidx.core.view.isVisible import com.yizhuan.erban.R import com.yizhuan.erban.databinding.LayoutSingleRoomPkRankListViewBinding import com.yizhuan.erban.ui.utils.ImageLoadUtils @@ -20,7 +22,7 @@ class SingleRoomPKRankListView @JvmOverloads constructor( LayoutSingleRoomPkRankListViewBinding.inflate(LayoutInflater.from(context)) private val tvValues = arrayOf(binding.tvValue1, binding.tvValue2, binding.tvValue3) private val ivAvatars = arrayOf(binding.ivAvatar1, binding.ivAvatar2, binding.ivAvatar3) - private var defaultAvatarRes = R.drawable.bg_room_pk_rank_contribute_default + private var defaultAvatarRes = R.drawable.single_room_pk_bg_red_mic init { addView(binding.root) @@ -44,7 +46,10 @@ class SingleRoomPKRankListView @JvmOverloads constructor( for (i in tvValues.indices) { val rankBean = data?.getOrNull(i) tvValues[i].text = rankBean?.amount ?: "0" - tvValues[i].isGone = "0" == tvValues[i].text + tvValues[i].isInvisible = "0" == tvValues[i].text + if (i == 0) { + binding.viewMvp.isVisible = "0" != tvValues[i].text + } ImageLoadUtils.loadImage( context, rankBean?.avatar, diff --git a/app/src/main/res/drawable-xhdpi/single_room_pk_bg_board.png b/app/src/main/res/drawable-xhdpi/single_room_pk_bg_board.png index 064bdbaf2..feb161619 100644 Binary files a/app/src/main/res/drawable-xhdpi/single_room_pk_bg_board.png and b/app/src/main/res/drawable-xhdpi/single_room_pk_bg_board.png differ diff --git a/app/src/main/res/layout/item_micro_single_room_pk_boss.xml b/app/src/main/res/layout/item_micro_single_room_pk_boss.xml index d38c34d53..4164ec60c 100644 --- a/app/src/main/res/layout/item_micro_single_room_pk_boss.xml +++ b/app/src/main/res/layout/item_micro_single_room_pk_boss.xml @@ -44,37 +44,43 @@ + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toTopOf="parent" + app:source="svga/single_room_pk_vs.svga" /> - - - + app:layout_constraintStart_toStartOf="@id/iv_red_star" + android:layout_marginStart="13dp" + android:layout_marginEnd="13dp" + app:layout_constraintTop_toTopOf="@id/pb_score" + app:source="svga/single_room_pk_pb_indicator.svga" /> - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@id/micro_view" /> + + + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_marginTop="4dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/contribute_list"> + android:visibility="gone" + app:layout_constraintStart_toEndOf="@id/contribute_list" + app:layout_constraintTop_toTopOf="@id/contribute_list" /> + android:layout_marginBottom="6dp" + app:layout_constraintBottom_toTopOf="@id/bottom_view" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + android:layout_marginBottom="10dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> + android:layout_marginBottom="@dimen/dp_10" + app:layout_constraintBottom_toTopOf="@id/fl_speedy_message" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/vip_broadcast_view" /> + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/barrier_micro" /> + android:layout="@layout/avroom_music_player_layout" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/anotherroompk/SimpleRoomInfo.kt b/core/src/main/java/com/yizhuan/xchat_android_core/room/anotherroompk/SimpleRoomInfo.kt index eda607696..74ef6a357 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/anotherroompk/SimpleRoomInfo.kt +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/anotherroompk/SimpleRoomInfo.kt @@ -4,9 +4,9 @@ import java.io.Serializable data class SimpleRoomInfo( val title: String? = null, - val roomUid :Long = 0L, - val erbanNo :Long = 0L, - val avatar :String? = null, - val crossPking:Boolean = false, - var checked :Boolean = false + val roomUid: Long = 0L, + val erbanNo: Long = 0L, + val avatar: String? = null, + val crossPking: Boolean = false, + var checked: Boolean = false ) : Serializable