diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java index e61ea5d8d..a7c3a2be9 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java @@ -668,6 +668,13 @@ public class AVRoomActivity extends BaseMvpActivity { + if (!aBoolean) { + if (isValid()) { + showGiftDialog(); + } + } + }); tryEnabledViewPagerInput(); viewpager.setCurrentItem(1, false); if (isRoomMin) { @@ -1201,17 +1208,10 @@ public class AVRoomActivity extends BaseMvpActivity { giftList.pollFirst(); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java index 011db34c0..f14693e16 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java @@ -18,6 +18,8 @@ import androidx.appcompat.widget.AppCompatImageView; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.recyclerview.widget.LinearLayoutManager; import com.netease.nim.uikit.common.util.string.StringUtil; @@ -114,6 +116,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe private String FOLLOW_ROOM_TYPE = ""; private SelectGameAdapter gameAdapter; + public final MutableLiveData playNotifyStateLiveData = new MutableLiveData(false); public static HomePartyFragment newInstance() { HomePartyFragment homePartyFragment = new HomePartyFragment(); @@ -214,10 +217,11 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe gameMainBinding.llRoomInfo.setOnClickListener(this); gameMainBinding.ivBack.setOnClickListener(this); + mRoomEffectView.setPlayNotifyStateListener(playNotifyStateLiveData); mRoomEffectView.setOnPlayAnimCallback(new Function0() { @Override public Boolean invoke() { - return getIsAnim(); + return isShowingGiftNotify(); } }); } @@ -360,18 +364,22 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe * * @return */ - private boolean getIsAnim() { - if (giftView != null) { - return giftView.getIsPlayAnim(); + private boolean isShowingGiftNotify() { + if ((getActivity() instanceof AVRoomActivity)) { + return ((AVRoomActivity) getActivity()).isShowingGiftNotify(); } return false; } - /** - * 获取玩法飘屏是否展示 - */ - private boolean getIsPlayAnim() { - return mRoomEffectView.getIsPlayAnim(); + public LiveData getPlayNotifyState(){ + return playNotifyStateLiveData; + } + + public boolean isShowingPlayNotify(){ + if(playNotifyStateLiveData.getValue()==null) { + return false; + } + return playNotifyStateLiveData.getValue(); } private void onReceiveLuckyGiftToMultiMsg(LuckyBagGifts giftMultiReceiverInfo) { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt index 78046522d..8fb0fe3b7 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt @@ -19,8 +19,12 @@ import android.view.animation.AnimationUtils import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView +import androidx.annotation.NonNull import androidx.core.content.ContextCompat import androidx.core.text.HtmlCompat +import androidx.lifecycle.MutableLiveData +import com.chuhai.utils.UiUtils +import com.chuhai.utils.ktx.setPadding2 import com.coorchice.library.SuperTextView import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage @@ -31,6 +35,7 @@ import com.yizhuan.erban.R import com.yizhuan.erban.avroom.activity.AVRoomActivity import com.yizhuan.erban.avroom.bean.RoomPlayBean import com.yizhuan.erban.avroom.helper.AnimHelper +import com.yizhuan.erban.base.TitleBar import com.yizhuan.erban.common.svga.SimpleSvgaCallback import com.yizhuan.erban.databinding.LayoutRoomEffectBinding import com.yizhuan.erban.ui.utils.ImageLoadUtils @@ -40,7 +45,6 @@ import com.yizhuan.erban.ui.utils.loadAnim import com.yizhuan.erban.ui.webview.CommonWebViewActivity import com.yizhuan.erban.ui.widget.SimpleAnimListener import com.yizhuan.erban.ui.widget.drawgift.DrawGiftPlayHelper -import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil import com.yizhuan.erban.utils.MsgBuilder import com.yizhuan.erban.utils.RegexUtil import com.yizhuan.erban.utils.SpannableBuilder @@ -134,14 +138,22 @@ class RoomEffectView @JvmOverloads constructor( private val drawGiftPlayHelper: DrawGiftPlayHelper by lazy { DrawGiftPlayHelper(context as Activity) } - private var isPlayAnim = false + private var playNotifyStateLiveData: MutableLiveData? = null private var onPlayAnimCallback: (() -> Boolean)? = null + fun setPlayNotifyStateListener(stateLiveData: MutableLiveData) { + this.playNotifyStateLiveData = stateLiveData + } fun setOnPlayAnimCallback(onPlayAnimCallback: (() -> Boolean)) { this.onPlayAnimCallback = onPlayAnimCallback } + @NonNull + private fun isShowingGiftNotify(): Boolean { + return onPlayAnimCallback?.invoke() ?: false + } + private fun loopCarAnim() { if (context.isDestroyed()) return isSvgaPlaying = false @@ -265,6 +277,11 @@ class RoomEffectView @JvmOverloads constructor( loopCarAnim() } }) + var statusBarHeight = TitleBar.getStatusBarHeight() + if (statusBarHeight == 0) { + statusBarHeight = UiUtils.dip2px(25f) + } + binding.clNotify.setPadding2(top = binding.clNotify.paddingTop + statusBarHeight) } /** @@ -288,29 +305,12 @@ class RoomEffectView @JvmOverloads constructor( if (binding.flLuckyBagNotify.childCount != 0) { return@subscribe } - + val isPlay = onPlayAnimCallback?.invoke() ?: false when (messagesPlay[0].event) { RoomEvent.BOX_NOTIFY -> {//寻爱 if ((mContext as AVRoomActivity).isTopActivity) { - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 180.0), - 0, - 0 - ) - } else { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 60.0), - 0, - 0 - ) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showBoxNotify( messagesPlay.removeAt(0) ) @@ -319,50 +319,16 @@ class RoomEffectView @JvmOverloads constructor( RoomEvent.BOX_NOTIFY_SVGA -> {//寻爱 if ((mContext as AVRoomActivity).isTopActivity) { - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 180.0), - 0, - 0 - ) - } else { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 60.0), - 0, - 0 - ) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showBoxNotifyBySVGA(messagesPlay.removeAt(0)) } } RoomEvent.TAROT_NOTIFY -> { if ((mContext as AVRoomActivity).isTopActivity) { - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 180.0), - 0, - 0 - ) - } else { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 60.0), - 0, - 0 - ) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showTarotNotify( messagesPlay.removeAt(0) ) @@ -371,25 +337,8 @@ class RoomEffectView @JvmOverloads constructor( RoomEvent.TAROT_NOTIFY_SVGA -> { if ((mContext as AVRoomActivity).isTopActivity) { - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 180.0), - 0, - 0 - ) - } else { - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, 60.0), - 0, - 0 - ) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showTarotNotifyBySVGA(messagesPlay.removeAt(0)) } } @@ -398,17 +347,8 @@ class RoomEffectView @JvmOverloads constructor( if (!(mContext as AVRoomActivity).isTopActivity) { return@subscribe } - - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - margin( - binding.clNotify, - 0, - UIUtil.dip2px(context, if (isPlay) 180.0 else 60.0), - 0, - 0 - ) - + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() val msg = messagesPlay.removeAt(0) val attachment = msg.chatRoomMessage.attachment as NotifyH5Attachment val bean = attachment.bean ?: return@subscribe @@ -421,39 +361,24 @@ class RoomEffectView @JvmOverloads constructor( } RoomEvent.RECEIVE_ROOM_LUCKY_BAG_NOTICE, RoomEvent.RECEIVE_SERVICE_LUCKY_BAG_NOTICE -> {//福袋 - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 180.0), 0, 0) - } else { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 60.0), 0, 0) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showLuckyBagNotify( messagesPlay.removeAt(0) ) } RoomEvent.LUCKY_SEA_GIFT_ROOM_NOTIFY -> {//星级厨房 - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 180.0), 0, 0) - } else { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 60.0), 0, 0) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showLuckySeaNotify( messagesPlay.removeAt(0) ) } RoomEvent.LUCKY_SEA_GIFT_SERVER_NOTIFY -> {//星级厨房 - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 180.0), 0, 0) - } else { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 60.0), 0, 0) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showLuckySeaNotifyBySVGA( messagesPlay.removeAt(0) ) @@ -464,13 +389,8 @@ class RoomEffectView @JvmOverloads constructor( RoomEvent.FAIRY_CONVERT_L1, RoomEvent.FAIRY_CONVERT_L2, RoomEvent.FAIRY_CONVERT_L3 -> {//夺宝 - isPlayAnim = true - val isPlay = onPlayAnimCallback?.invoke() ?: false - if (isPlay) { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 180.0), 0, 0) - } else { - margin(binding.clNotify, 0, UIUtil.dip2px(context, 60.0), 0, 0) - } + playNotifyStateLiveData?.value = true + resetPlayNotifyMargin() showFairyNotify( messagesPlay.removeAt(0) ) @@ -497,8 +417,8 @@ class RoomEffectView @JvmOverloads constructor( textView.startAnimation(animationPlay) binding.flPlayNotify.postDelayed( { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(textView) - isPlayAnim = false }, SHOW_TIME.toLong() ) @@ -524,8 +444,8 @@ class RoomEffectView @JvmOverloads constructor( svgaImageView.callback = object : SimpleSvgaCallback() { override fun onFinished() { binding.flPlayNotify.post { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(svgaImageView) - isPlayAnim = false } } } @@ -644,6 +564,19 @@ class RoomEffectView @JvmOverloads constructor( ) + "…" } + /** + * 重置玩法飘窗间距 + */ + private fun resetPlayNotifyMargin() { + var top = 0 + if (isShowingGiftNotify()) { + // 有礼物飘窗展示时,需要在它下面展示 + // 间距 = 礼物飘窗高度(375:69) + 10DP间距 + top = (width / 375f * 69).toInt() + UiUtils.dip2px(10f) + } + margin(binding.clNotify, 0, top, 0, 0) + } + private fun margin(v: View, l: Int, t: Int, r: Int, b: Int) { if (v.layoutParams is MarginLayoutParams) { val params = v.layoutParams as MarginLayoutParams @@ -713,8 +646,8 @@ class RoomEffectView @JvmOverloads constructor( SHOW_TIME.toLong() ) binding.flLuckyBagNotify.postDelayed({ + playNotifyStateLiveData?.value = false binding.flLuckyBagNotify.removeView(roomView) - isPlayAnim = false }, CLOSE_TIME.toLong()) } @@ -760,8 +693,8 @@ class RoomEffectView @JvmOverloads constructor( textView.startAnimation(animationPlay) binding.flPlayNotify.postDelayed( { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(textView) - isPlayAnim = false }, SHOW_TIME.toLong() ) @@ -808,8 +741,8 @@ class RoomEffectView @JvmOverloads constructor( svgaImageView.callback = object : SimpleSvgaCallback() { override fun onFinished() { binding.flPlayNotify.post { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(svgaImageView) - isPlayAnim = false } } } @@ -853,7 +786,7 @@ class RoomEffectView @JvmOverloads constructor( private fun showNotifyH5(data: NotifyH5Info) { val textView = LayoutInflater.from(mContext) - .inflate(R.layout.layout_notify_h5, null) as TextView + .inflate(R.layout.layout_notify_h5, null) as TextView textView.text = data.content animationPlay = AnimationUtils.loadAnimation(mContext, R.anim.anim_box_notify) binding.flPlayNotify.addView(textView) @@ -866,8 +799,8 @@ class RoomEffectView @JvmOverloads constructor( SHOW_TIME.toLong() ) binding.flPlayNotify.postDelayed({ + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(textView) - isPlayAnim = false }, CLOSE_TIME.toLong()) } @@ -881,8 +814,8 @@ class RoomEffectView @JvmOverloads constructor( svgaImageView.callback = object : SimpleSvgaCallback() { override fun onFinished() { binding.flPlayNotify.post { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(svgaImageView) - isPlayAnim = false } } } @@ -942,8 +875,8 @@ class RoomEffectView @JvmOverloads constructor( SHOW_TIME.toLong() ) binding.flPlayNotify.postDelayed({ + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(textView) - isPlayAnim = false }, CLOSE_TIME.toLong()) } @@ -985,8 +918,8 @@ class RoomEffectView @JvmOverloads constructor( SHOW_TIME.toLong() ) binding.flPlayNotify.postDelayed({ + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(textView) - isPlayAnim = false }, CLOSE_TIME.toLong()) } @@ -1008,8 +941,8 @@ class RoomEffectView @JvmOverloads constructor( svgaImageView.callback = object : SimpleSvgaCallback() { override fun onFinished() { binding.flPlayNotify.post { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(svgaImageView) - isPlayAnim = false } } } @@ -1080,8 +1013,8 @@ class RoomEffectView @JvmOverloads constructor( animationPlay = AnimationUtils.loadAnimation(mContext, R.anim.anim_box_notify_close) animationPlay!!.setAnimationListener(object : SimpleAnimationListener() { override fun onAnimationEnd(animation: Animation?) { + playNotifyStateLiveData?.value = false binding.flPlayNotify.removeView(svgaImageView) - isPlayAnim = false } }) binding.flPlayNotify.startAnimation(animationPlay) @@ -1936,10 +1869,6 @@ class RoomEffectView @JvmOverloads constructor( }, SHOW_TIME.toLong()) } - fun getIsPlayAnim(): Boolean { - return isPlayAnim - } - override fun onDetachedFromWindow() { super.onDetachedFromWindow() playDisposable?.dispose() @@ -1953,7 +1882,7 @@ class RoomEffectView @JvmOverloads constructor( disposableRoomPK?.dispose() disposableSingleRoomPK?.dispose() disposableGiftCompound?.dispose() - isPlayAnim = false + playNotifyStateLiveData?.value = false } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java b/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java index 44c4625f6..da5fb282e 100644 --- a/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java +++ b/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java @@ -992,17 +992,10 @@ public abstract class BaseActivity extends RxAppCompatActivity if (data == null || data.getGiftUrl() == null) return; giftList.add(data); if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) { - if (giftDialog != null && giftDialog.isShowing()) { - // 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个 - AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst(); - if (dataBean != null) { - return; - } else { - giftDialog.dismiss(); - } - } else { - showGiftDialog(); + if (isShowingPlayNotify()) { + return; } + showGiftDialog(); } break; case CUSTOM_MSG_BOX://寻爱之旅 @@ -1187,8 +1180,11 @@ public abstract class BaseActivity extends RxAppCompatActivity private void showPlayEffectDialog() { if (playEffectList.size() == 0) return; - playEffectDialog = new AllPlayEffectDialog(this, playEffectList.peekFirst()); + PlayEffectInfo info = playEffectList.peekFirst(); + if (info == null) return; + playEffectDialog = new AllPlayEffectDialog(this, info, isShowingGiftNotify()); playEffectDialog.setOnDismissListener(dialog -> { + tryShowGiftDialog(); playEffectList.pollFirst(); PlayEffectInfo dataBean = playEffectList.peekFirst(); if (dataBean != null) { @@ -1206,12 +1202,20 @@ public abstract class BaseActivity extends RxAppCompatActivity } } + private void tryShowGiftDialog() { + showGiftDialog(); + } + private void showGiftDialog() { + if (giftList == null) return; if (giftList.size() == 0) return; AllServiceGiftProtocol.DataBean data = giftList.peekFirst(); if (data == null) { return; } + if (giftDialog != null && giftDialog.isShowing()) { + return; + } if (!data.isHomeShow()) { return; } @@ -1234,6 +1238,20 @@ public abstract class BaseActivity extends RxAppCompatActivity } } + private boolean isShowingGiftNotify() { + if (giftDialog != null && giftDialog.isShowing()) { + return true; + } + return false; + } + + private boolean isShowingPlayNotify() { + if (playEffectDialog != null && playEffectDialog.isShowing()) { + return true; + } + return false; + } + private AllServiceGiftLevelDialog generateAllServiceGiftDialog(@NonNull Context context, @NonNull AllServiceGiftProtocol.DataBean dataBean) { return new AllServiceGiftLevelDialog(context, dataBean); } diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/AllPlayEffectDialog.java b/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/AllPlayEffectDialog.java index 79a8ec59c..d7ce803b1 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/AllPlayEffectDialog.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/dialog/AllPlayEffectDialog.java @@ -66,10 +66,12 @@ public class AllPlayEffectDialog extends BaseDialog { private DialogAllPlayEffectBinding binding; private CompositeDisposable disposable = null; + private boolean belowGiftNotify; - public AllPlayEffectDialog(Context context, @NonNull PlayEffectInfo playEffectInfo) { + public AllPlayEffectDialog(Context context, @NonNull PlayEffectInfo playEffectInfo, boolean belowGiftNotify) { super(context, R.style.FullScreenDialog); this.playEffectInfo = playEffectInfo; + this.belowGiftNotify = belowGiftNotify; } @Override @@ -94,6 +96,9 @@ public class AllPlayEffectDialog extends BaseDialog { window.setAttributes(windowParams); window.setWindowAnimations(R.style.anim_left); } + if (belowGiftNotify) { + binding.vGiftNotifyPlaceholder.setVisibility(View.VISIBLE); + } switch (playEffectInfo.getSecond()) { case CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA: showBoxNotifyBySVGA(playEffectInfo.getRoomBoxPrizeInfo()); diff --git a/app/src/main/res/layout/dialog_all_play_effect.xml b/app/src/main/res/layout/dialog_all_play_effect.xml index 725a0ac9c..ce3492947 100644 --- a/app/src/main/res/layout/dialog_all_play_effect.xml +++ b/app/src/main/res/layout/dialog_all_play_effect.xml @@ -3,16 +3,27 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cl_notify" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:paddingTop="20dp"> + + + + app:layout_constraintTop_toBottomOf="@id/v_gift_notify_placeholder" + app:layout_goneMarginTop="0dp" /> diff --git a/app/src/main/res/layout/dialog_gift_all_service_level.xml b/app/src/main/res/layout/dialog_gift_all_service_level.xml index 0ff3eff5c..afc0038f6 100644 --- a/app/src/main/res/layout/dialog_gift_all_service_level.xml +++ b/app/src/main/res/layout/dialog_gift_all_service_level.xml @@ -13,13 +13,13 @@ + android:layout_height="wrap_content" + android:paddingTop="20dp"> diff --git a/app/src/main/res/layout/layout_room_effect.xml b/app/src/main/res/layout/layout_room_effect.xml index 626d78dc5..e9d92a9ac 100644 --- a/app/src/main/res/layout/layout_room_effect.xml +++ b/app/src/main/res/layout/layout_room_effect.xml @@ -42,7 +42,7 @@ android:id="@+id/cl_notify" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="60dp" + android:paddingTop="20dp" android:visibility="gone">