fix:优化房间玩法资源位展开效果

This commit is contained in:
Max
2024-02-21 16:43:22 +08:00
parent f721e34139
commit 9891c6f9d0
11 changed files with 193 additions and 55 deletions

View File

@@ -140,6 +140,7 @@ import com.yizhuan.xchat_android_core.super_admin.util.SAdminOptUtil;
import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil;
import com.yizhuan.xchat_android_core.support.room.RoomContext;
import com.yizhuan.xchat_android_core.support.room.RoomView;
import com.yizhuan.xchat_android_core.support.room.RoomWidget;
import com.yizhuan.xchat_android_core.treasurefairy.FairyMsgInfoBean;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.FirstChargeInfo;
@@ -1419,6 +1420,12 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return this;
}
@Nullable
@Override
public RoomWidget findWidget(@NonNull String name) {
return null;
}
private static class GiftBroadcastObserver implements Observer<BroadcastMessage> {
private WeakReference<AVRoomActivity> mReference;

View File

@@ -6,9 +6,6 @@ import android.app.Activity
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.text.TextUtils
import android.view.KeyEvent
@@ -47,7 +44,6 @@ import com.yizhuan.erban.avroom.dialog.AttentionHintDialog
import com.yizhuan.erban.avroom.dialog.DatingVipRuleDialog
import com.yizhuan.erban.avroom.dialog.RoomFreeGiftDialog
import com.yizhuan.erban.avroom.dialog.RoomOperationDialog
import com.yizhuan.erban.avroom.firstcharge.FirstChargeDialog
import com.yizhuan.erban.avroom.presenter.BaseRoomPresenter
import com.yizhuan.erban.avroom.redpackage.send.RedPackageSendDialog
import com.yizhuan.erban.avroom.room_album.RoomAlbumModel
@@ -1238,6 +1234,10 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
return this
}
override fun findWidget(name: String): RoomWidget? {
return widgets[name]
}
open fun initWidget() {
}

View File

@@ -26,6 +26,7 @@ import com.yizhuan.erban.avroom.dialog.PKMicQueueDialog;
import com.yizhuan.erban.avroom.dialog.PKResultDialog;
import com.yizhuan.erban.avroom.dialog.PKScoreBoardDialog;
import com.yizhuan.erban.avroom.firstcharge.FirstChargePrizeDialog;
import com.yizhuan.erban.avroom.gameplay.RoomGameplayListWidget;
import com.yizhuan.erban.avroom.gameplay.RoomGameplayWidget;
import com.yizhuan.erban.avroom.giftvalue.GiftValueDialogUiHelper;
import com.yizhuan.erban.avroom.presenter.HomePartyPresenter;
@@ -145,6 +146,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
registerWidget(RedPackageWidget.class.getSimpleName(), gameBinding.redPackageWidget);
registerWidget(RoomRankWidget.class.getSimpleName(), gameBinding.rankWidget);
registerWidget(RoomBannerWidget.class.getSimpleName(), gameBinding.bannerWidget);
registerWidget(RoomGameplayListWidget.class.getSimpleName(), gameBinding.gameplayListWidget);
registerWidget(RoomGameplayWidget.class.getSimpleName(), gameBinding.gameplayWidget);
}

View File

@@ -16,6 +16,7 @@ import com.yizhuan.erban.avroom.adapter.SingleRoomPKMicroViewAdapter
import com.yizhuan.erban.avroom.banner.RoomBannerWidget
import com.yizhuan.erban.avroom.dialog.RequestUpMicDialog
import com.yizhuan.erban.avroom.firstcharge.FirstChargePrizeDialog
import com.yizhuan.erban.avroom.gameplay.RoomGameplayListWidget
import com.yizhuan.erban.avroom.gameplay.RoomGameplayWidget
import com.yizhuan.erban.avroom.presenter.SingleRoomPresenter
import com.yizhuan.erban.avroom.rank.RoomRankWidget
@@ -256,6 +257,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
registerWidget(RedPackageWidget::class.java.simpleName, gameBinding.redPackageWidget)
registerWidget(RoomRankWidget::class.java.simpleName, gameBinding.rankWidget)
registerWidget(RoomBannerWidget::class.java.simpleName, gameBinding.bannerWidget)
registerWidget(RoomGameplayListWidget::class.java.simpleName, gameBinding.gameplayListWidget)
registerWidget(RoomGameplayWidget::class.java.simpleName, gameBinding.gameplayWidget)
}

View File

@@ -0,0 +1,61 @@
package com.yizhuan.erban.avroom.gameplay
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.databinding.DataBindingUtil
import com.yizhuan.erban.R
import com.yizhuan.erban.databinding.RoomGameplayListWidgetBinding
import com.yizhuan.xchat_android_core.room.bean.RoomIcon
import com.yizhuan.xchat_android_core.support.room.FrameLayoutRoomWidget
/**
* Created by Max on 2024/2/20 10:42
* Desc:玩法活动
**/
class RoomGameplayListWidget : FrameLayoutRoomWidget {
private val adapter = RoomPlayListAdapter()
private val binding: RoomGameplayListWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_gameplay_list_widget, this, true
)
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
binding.recyclerView.adapter = adapter
binding.ivSwitch.setOnClickListener {
getGameplayIconWidget()?.switchUI(false)
}
adapter.setOnItemClickListener { adapter, view, position ->
(adapter.getItem(position) as? RoomIcon)?.let {
getGameplayIconWidget()?.jump(it)
}
}
}
private fun getGameplayIconWidget(): RoomGameplayWidget? {
return roomView?.findWidget(
RoomGameplayWidget::class.simpleName ?: ""
) as? RoomGameplayWidget
}
fun loadData(list: List<RoomIcon>) {
adapter.setNewData(list)
}
}

View File

@@ -3,6 +3,7 @@ package com.yizhuan.erban.avroom.gameplay
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chuhai.utils.ktx.singleClick
@@ -27,7 +28,6 @@ import com.yizhuan.xchat_android_core.support.room.RoomView
* Desc:玩法活动
**/
class RoomGameplayWidget : FrameLayoutRoomWidget {
private val adapter = RoomPlayListAdapter()
private val binding: RoomGameplayWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
@@ -37,6 +37,8 @@ class RoomGameplayWidget : FrameLayoutRoomWidget {
private var isOpened = false
private var list: List<RoomIcon>? = null
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
@@ -53,17 +55,11 @@ class RoomGameplayWidget : FrameLayoutRoomWidget {
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
binding.recyclerView.adapter = adapter
binding.ivSwitch.setOnClickListener {
switchUI(!isOpened)
}
binding.ivIcon.singleClick {
adapter.getItem(0)?.let {
jump(it)
}
}
adapter.setOnItemClickListener { adapter, view, position ->
(adapter.getItem(position) as? RoomIcon)?.let {
list?.getOrNull(0)?.let {
jump(it)
}
}
@@ -82,26 +78,29 @@ class RoomGameplayWidget : FrameLayoutRoomWidget {
getCompositeDisposable().add(disposable)
}
private fun switchUI(open: Boolean) {
this.isOpened = open
if (open) {
binding.recyclerView.isVisible = true
binding.ivIcon.isVisible = false
binding.ivSwitch.setImageResource(R.drawable.room_gameplay_ic_arrow_right)
fun switchUI(openListWidget: Boolean) {
this.isOpened = openListWidget
if (openListWidget) {
this.visibility = View.INVISIBLE
getGameplayListWidget()?.visibility = View.VISIBLE
} else {
binding.recyclerView.isVisible = false
binding.ivIcon.isVisible = true
binding.ivSwitch.setImageResource(R.drawable.room_gameplay_ic_arrow_left)
this.visibility = View.VISIBLE
getGameplayListWidget()?.visibility = View.GONE
}
}
private fun loadData(list: List<RoomIcon>) {
this.list = list
this.isVisible = list.isNotEmpty()
adapter.setNewData(list)
val listWidget = getGameplayListWidget()
if (list.isEmpty()) {
listWidget?.isVisible = false
}
listWidget?.loadData(list)
binding.ivIcon.load(list.firstOrNull()?.icon)
}
private fun jump(data: RoomIcon) {
fun jump(data: RoomIcon) {
if (data.isSeizeTreasure()) {
HomeFairyActivity.start(context)
} else if (data.isFirstCharge()) {
@@ -123,4 +122,10 @@ class RoomGameplayWidget : FrameLayoutRoomWidget {
}
}
}
private fun getGameplayListWidget(): RoomGameplayListWidget? {
return roomView?.findWidget(
RoomGameplayListWidget::class.simpleName ?: ""
) as? RoomGameplayListWidget
}
}

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:background="@color/black">
<androidx.cardview.widget.CardView
android:id="@+id/layout_content"
android:layout_width="@dimen/dp_180"
android:layout_height="@dimen/dp_124"
app:cardBackgroundColor="@color/transparent"
app:cardCornerRadius="@dimen/dp_12"
app:cardElevation="0px"
app:cardMaxElevation="0px"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.github.mmin18.widget.RealtimeBlurView
android:id="@+id/blur_view_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:realtimeBlurRadius="25dp"
app:realtimeDownsampleFactor="4"
app:realtimeOverlayColor="#80000000" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/room_gameplay_bg" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/dp_4"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3" />
</androidx.cardview.widget.CardView>
<ImageView
android:id="@+id/iv_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="-5dp"
android:paddingVertical="@dimen/dp_15"
android:paddingStart="@dimen/dp_15"
android:paddingEnd="6dp"
android:scaleType="centerInside"
android:src="@drawable/room_gameplay_ic_arrow_right"
app:layout_constraintBottom_toBottomOf="@id/layout_content"
app:layout_constraintEnd_toStartOf="@id/layout_content"
app:layout_constraintTop_toTopOf="@id/layout_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -9,16 +9,15 @@
tools:background="@color/black">
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/layout_content"
android:layout_width="@dimen/dp_66"
android:layout_height="@dimen/dp_66"
app:cardBackgroundColor="@color/transparent"
app:cardCornerRadius="@dimen/dp_12"
app:cardElevation="0px"
app:cardMaxElevation="0px"
app:layout_constraintBottom_toBottomOf="@id/layout_content"
app:layout_constraintEnd_toEndOf="@id/layout_content"
app:layout_constraintStart_toStartOf="@id/layout_content"
app:layout_constraintTop_toTopOf="@id/layout_content">
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<com.github.mmin18.widget.RealtimeBlurView
android:id="@+id/blur_view_icon"
@@ -32,36 +31,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/room_gameplay_bg" />
</androidx.cardview.widget.CardView>
<FrameLayout
android:id="@+id/layout_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="@dimen/dp_58"
android:layout_height="@dimen/dp_58"
android:layout_gravity="end|bottom"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/dp_4"
android:scaleType="centerCrop"
tools:src="@drawable/default_cover" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="@dimen/dp_176"
android:layout_height="@dimen/dp_120"
android:layout_margin="@dimen/dp_4"
android:orientation="vertical"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:spanCount="3"/>
</FrameLayout>
</androidx.cardview.widget.CardView>
<ImageView
android:id="@+id/iv_switch"

View File

@@ -227,7 +227,7 @@
android:layout_height="58dp"
android:layout_above="@id/iv_queuing_micro"
android:layout_alignParentEnd="true"
android:layout_marginEnd="9.5dp"
android:layout_marginEnd="6dp"
android:layout_marginBottom="6dp"
android:visibility="gone"
tools:visibility="visible" />
@@ -258,6 +258,15 @@
android:visibility="gone"
tools:visibility="visible" />
<com.yizhuan.erban.avroom.gameplay.RoomGameplayListWidget
android:id="@+id/gameplay_list_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@id/gameplay_widget"
android:layout_alignBottom="@id/gameplay_widget"
android:visibility="gone"
tools:visibility="visible" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -198,9 +198,9 @@
android:id="@+id/red_package_widget"
android:layout_width="58dp"
android:layout_height="58dp"
android:layout_marginBottom="72dp"
android:layout_marginBottom="6dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/gameplay_widget"
app:layout_constraintBottom_toTopOf="@id/gameplay_widget"
app:layout_constraintEnd_toEndOf="@id/gameplay_widget"
tools:visibility="visible" />
@@ -241,6 +241,15 @@
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<com.yizhuan.erban.avroom.gameplay.RoomGameplayListWidget
android:id="@+id/gameplay_list_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/gameplay_widget"
app:layout_constraintEnd_toEndOf="@id/gameplay_widget"
tools:visibility="visible" />
<RelativeLayout
android:id="@+id/input_layout"
android:layout_width="0dp"

View File

@@ -19,4 +19,6 @@ interface RoomView {
fun getRoomContext(): RoomContext? {
return RoomContext.get()
}
fun findWidget(name: String): RoomWidget?
}