点唱房功能

This commit is contained in:
2025-11-18 19:39:16 +08:00
parent 45923ae858
commit 88a94c7c10
160 changed files with 6801 additions and 355 deletions

View File

@@ -0,0 +1,173 @@
package com.xscm.modulemain.dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.ScreenUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.DialogGiftSongBinding;
import com.xscm.moduleutil.adapter.GiftRoomAdapter;
import com.xscm.moduleutil.base.BaseFragment;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.GiftNumBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.event.GiftUserRefreshEvent;
import com.xscm.moduleutil.event.RoomGiftClickToEvent;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
import com.xscm.moduleutil.widget.dialog.KeyboardPopupWindow;
import com.xscm.moduleutil.widget.dialog.SelectGiftNumPopupWindow;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
/**
* 礼物歌曲对话框类
* 该类可能用于实现一个展示歌曲相关礼物的对话框界面
*/
public class GiftSongDialog extends BaseDialog<DialogGiftSongBinding> {
private GiftRoomAdapter roomAdapter;
private List<GiftNumBean> mGiftNumList;
private SelectGiftNumPopupWindow mSelectGiftNumPopupWindow;
private KeyboardPopupWindow mKeyboardPopupWindow;
private List<RoonGiftModel> giftList = new ArrayList<>();
private OnGiftConfirmListener onGiftConfirmListener;
public GiftSongDialog(@NonNull Context context) {
super(context, com.xscm.moduleutil.R.style.dialogBottom);
}
public interface OnGiftConfirmListener {
void onGiftConfirm(String giftId,String name, String giftNum);
}
public void setOnGiftConfirmListener(OnGiftConfirmListener listener) {
this.onGiftConfirmListener = listener;
}
@Override
public int getLayoutId() {
return R.layout.dialog_gift_song;
}
@Override
public void initView() {
EventBus.getDefault().register(this);
setCancelable(true);
setCanceledOnTouchOutside(true);
Window window = getWindow();
window.setGravity(Gravity.BOTTOM);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
mBinding.tvGiveCoinNum.setOnClickListener(this::onClick);
mBinding.tvGive.setOnClickListener(this::onClick);
}
private void onClick(View view1) {
if (view1.getId()== com.xscm.moduleutil.R.id.tv_give_coin_num){
if (mSelectGiftNumPopupWindow == null) {
mSelectGiftNumPopupWindow = new SelectGiftNumPopupWindow(getContext(), (adapter, view, position) -> {
GiftNumBean giftNumBean = (GiftNumBean) adapter.getItem(position);
if ("0".equals(giftNumBean.getNumber())) {//自定义
mKeyboardPopupWindow = new KeyboardPopupWindow(getContext(), getCurrentFocus());
mKeyboardPopupWindow.refreshKeyboardOutSideTouchable(false);//false开启键盘 true关闭键盘
mKeyboardPopupWindow.addRoomPasswordListener(new KeyboardPopupWindow.KeyboardCompleteListener() {//监听自定键盘的完成
@Override
public void inputComplete(String inputContent) {
mBinding.tvGiveCoinNum.setText(inputContent);
mKeyboardPopupWindow.releaseResources();
}
});
} else {
mBinding.tvGiveCoinNum.setText(giftNumBean.getNumber());
}
mSelectGiftNumPopupWindow.dismiss();
});
}
mSelectGiftNumPopupWindow.setData(mGiftNumList);
mSelectGiftNumPopupWindow.showAtLocation(mBinding.tvGiveCoinNum, Gravity.BOTTOM | Gravity.RIGHT, 100, 230);
}else if (view1.getId()== com.xscm.moduleutil.R.id.tv_give){
// 获取选中的礼物ID
String selectedGiftId = null;
String name="";
for (RoonGiftModel giftModel : giftList) {
if (giftModel.isChecked()) {
selectedGiftId = giftModel.getGift_id();
name=giftModel.getGift_name();
break;
}
}
// 获取礼物数量
String giftNum = mBinding.tvGiveCoinNum.getText().toString();
// 如果有选中的礼物,通过回调传递数据
if (selectedGiftId != null && onGiftConfirmListener != null) {
onGiftConfirmListener.onGiftConfirm(selectedGiftId,name, giftNum);
dismiss();
}
}
}
@Override
public void initData() {
mGiftNumList=new ArrayList<>();
mGiftNumList.add(new GiftNumBean("20", "x20"));
mGiftNumList.add(new GiftNumBean("15", "x15"));
mGiftNumList.add(new GiftNumBean("10", "x10"));
mGiftNumList.add(new GiftNumBean("5", "x5"));
mGiftNumList.add(new GiftNumBean("1", "x1"));
RetrofitClient.getInstance().getGiftList(0,"",new BaseObserver<List<RoonGiftModel>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<RoonGiftModel> roonGiftModels) {
giftList= roonGiftModels;
roomAdapter = new GiftRoomAdapter(CommonAppContext.getInstance(), roonGiftModels, 0, "0");
mBinding.rvGift.setAdapter(roomAdapter);
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftClicRoomkTEvent(RoomGiftClickToEvent event) {
String id = event.gift.getGift_id();
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
if (giftModel.isChecked()) {
giftModel.setChecked(false);
} else {
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
}
}