From 4e0ea44f218f2394e2ba3a03ca93dc1999cfe7bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=B0=8F=E6=B1=9F?= <461355754@qq.com> Date: Tue, 16 Sep 2025 14:18:59 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E4=BA=A4=E5=8F=8B?= =?UTF-8?q?=E5=92=8C=E8=BD=AE=E7=9B=98bug=E5=92=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialog/giftLottery/GiftLotteryDialog.java | 29 +++--- .../xscm/moduleutil/widget/GiftAnimView.java | 93 ++++++++++++++++--- .../widget/QXGiftPlayerManager.java | 11 ++- .../fragment/FriendshipRoomFragment.java | 17 ++-- .../PublicScreenEaseChatFragment.java | 1 - 5 files changed, 115 insertions(+), 36 deletions(-) diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java index f4f8d5f..ea9c04a 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java @@ -855,26 +855,29 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment0) { + for (int i = 0; i < blindReslutBean.getReslut_list().size(); i++) { + BlindReslutBean.ReslutList reslutList = blindReslutBean.getReslut_list().get(i); - for (int j = 0; j < giftLists.size(); j++) { - if (giftLists.get(j).getGift_id().equals(reslutList.getGift_id() + "")) { - targetArrayIndex.add(j); - if (j < giftMaxCount) { - GiftCardView giftCardView = allViewsArray.get(j); - GiftBean giftBean = giftLists.get(j); - giftBean.setCount(reslutList.getCount()); - giftCardView.setVisibilitymResultTextView(true); - giftCardView.setSelected(true); - // 不要设置isDrawing=true,这会影响动画控制 + for (int j = 0; j < giftLists.size(); j++) { + if (giftLists.get(j).getGift_id().equals(reslutList.getGift_id() + "")) { + targetArrayIndex.add(j); + if (j < giftMaxCount) { + + GiftCardView giftCardView = allViewsArray.get(j); + GiftBean giftBean = giftLists.get(j); + giftBean.setCount(reslutList.getCount()); + giftCardView.setVisibilitymResultTextView(true); + giftCardView.setSelected(true); + // 不要设置isDrawing=true,这会影响动画控制 // MvpPre.wallet(); // isDrawing = false; // MvpPre.giftSend(blind_box_turntable_id); - giftCardView.bindGiftData(giftBean); + giftCardView.bindGiftData(giftBean); + } } } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/GiftAnimView.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/GiftAnimView.java index 4408395..e27f2cd 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/GiftAnimView.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/GiftAnimView.java @@ -44,7 +44,7 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio private boolean isLoadEffect = false; private boolean isShow = true;//是否开启特效 private ReentrantLock lock = new ReentrantLock(); - private List giftArray = new ArrayList<>(); + private List giftArray = new ArrayList<>(); public ExecutorService queue = Executors.newSingleThreadExecutor(); private Context mContext; @@ -84,6 +84,8 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio LogUtils.e("onVideoComplete"); post(() -> { playerMp4View.setVisibility(View.GONE); + // 通知播放完成 + notifyPlaybackComplete(); loadStartSVGAPlayer(); }); @@ -114,18 +116,48 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio svgaView.setDidStartAnimation(this); } - /// 礼物特效进来 gift为礼物实体类 - public void displayEffectView(final GiftBean gift) { + public void displayEffectView1(List stringList){ queue.execute(new Runnable() { @Override public void run() { /// 如果play_image不存在return - if (gift == null || gift.getPlay_image().isEmpty()) { + if (stringList == null || stringList.isEmpty()) { + return; + } + + + /// 锁住list + lock.lock(); + try { + /// 添加礼物进list + giftArray.addAll(stringList); + + /// 如果没有在加载则开始加载 + if (!isLoadEffect) { + /// 更改加载状态标记 + isLoadEffect = true; + loadStartSVGAPlayer(); + } + } finally { + /// 解锁 + lock.unlock(); + } + } + }); + } + + /// 礼物特效进来 gift为礼物实体类 + public void displayEffectView(final String gift) { + queue.execute(new Runnable() { + @Override + public void run() { + /// 如果play_image不存在return + if (gift == null || gift.isEmpty()) { return; } /// 将play_image链接转为小写 - String playImage = gift.getPlay_image(); + String playImage = gift; String pathExtension = getFileExtension(playImage).toLowerCase(); /// 判定礼物的后缀是否为svga或者mp4如果非这两种 则return @@ -176,7 +208,7 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio return; } - GiftBean giftModel = null; + String giftModel = null; /// list加锁 lock.lock(); @@ -196,12 +228,12 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio lock.unlock(); } - if (isLoadEffect && giftModel != null && !TextUtils.isEmpty(giftModel.getPlay_image())) { - GiftBean finalGiftModel = giftModel; + if (isLoadEffect && giftModel != null && !TextUtils.isEmpty(giftModel)) { + String finalGiftModel = giftModel; post(new Runnable() { @Override public void run() { - String playImage = finalGiftModel.getPlay_image(); + String playImage = finalGiftModel; if (playImage.endsWith("mp4")) { downloadAndPlay(getContext(), playImage, new DownloadCallback() { @Override @@ -233,7 +265,7 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio post(() -> { playerMp4View.setVisibility(View.GONE); svgaView.setVisibility(View.VISIBLE); - svgaView.loadSVGAPlayerWith(finalGiftModel.getPlay_image(), false); + svgaView.loadSVGAPlayerWith(finalGiftModel, false); }); } else { lock.lock(); @@ -242,7 +274,7 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio } finally { lock.unlock(); } - + loadStartSVGAPlayer(); // 直接播放缓存文件 } @@ -344,7 +376,8 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio removeSvgaQueueData(); svgaView.stopEffectSvgaPlay(); playerMp4View.stopPlay(); - + // 清理监听器 + clearPlaybackCompleteListeners(); removeView(playerMp4View); removeView(svgaView); svgaView = null; @@ -383,7 +416,43 @@ public class GiftAnimView extends FrameLayout implements GiftSvgaView.OnAnimatio public void onFinishedDisplay(GiftSvgaView view) { post(() -> { svgaView.setVisibility(View.GONE); + // 通知播放完成 + notifyPlaybackComplete(); loadStartSVGAPlayer(); }); } + + // 在 GiftAnimView 类中添加播放完成监听接口 + public interface OnPlaybackCompleteListener { + void onPlaybackComplete(); + } + + // 在 GiftAnimView 类中添加成员变量 + private List playbackCompleteListeners = new ArrayList<>(); + + // 在 GiftAnimView 类中添加监听器管理方法 + public void addOnPlaybackCompleteListener(OnPlaybackCompleteListener listener) { + if (listener != null && !playbackCompleteListeners.contains(listener)) { + playbackCompleteListeners.add(listener); + } + } + + public void removeOnPlaybackCompleteListener(OnPlaybackCompleteListener listener) { + if (listener != null) { + playbackCompleteListeners.remove(listener); + } + } + + public void clearPlaybackCompleteListeners() { + playbackCompleteListeners.clear(); + } + + // 触发播放完成回调的方法 + private void notifyPlaybackComplete() { + for (OnPlaybackCompleteListener listener : new ArrayList<>(playbackCompleteListeners)) { + if (listener != null) { + listener.onPlaybackComplete(); + } + } + } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/QXGiftPlayerManager.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/QXGiftPlayerManager.java index da4d6ba..8fbcbcc 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/QXGiftPlayerManager.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/QXGiftPlayerManager.java @@ -7,6 +7,7 @@ import android.widget.FrameLayout; import com.xscm.moduleutil.bean.GiftBean; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; @@ -65,14 +66,20 @@ public class QXGiftPlayerManager { ((ViewGroup) bgEffectView).addView(getDefaultFullEffectView()); ((ViewGroup) bgEffectView).addView(getDefaultChatEffectView()); } - public void displayFullEffectView(GiftBean gift) { + public void displayFullEffectView(String gift) { getDefaultFullEffectView().displayEffectView(gift); } - public void displayChatEffectView(GiftBean gift) { + public void displayFullEffectView1(List stringList){ + getDefaultFullEffectView().displayEffectView1(stringList); + } + + public void displayChatEffectView(String gift) { getDefaultChatEffectView().displayEffectView(gift); } + + public void openOrCloseEffectViewWith(boolean isShow) { getDefaultFullEffectView().openOrCloseEffectViewWith(isShow); getDefaultChatEffectView().openOrCloseEffectViewWith(isShow); diff --git a/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java b/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java index 0407af6..a6060cb 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java +++ b/moduleroom/src/main/java/com/example/moduleroom/fragment/FriendshipRoomFragment.java @@ -344,49 +344,49 @@ public class FriendshipRoomFragment extends BaseRoomFragment