diff --git a/app/build.gradle b/app/build.gradle index ed90f76..c623fdf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,19 +66,19 @@ android { // // 测试版配置 beta { - dimension "environment" - // 测试版包名:基础包名 + .beta(com.example.myapp.beta) - applicationIdSuffix ".beta" - // 测试版版本名:1.0-beta - versionNameSuffix "-beta" - - // 【测试版应用名称】动态生成带标识的名称 - resValue "string", "app_name", "秘地-测试版" - - // 【测试版图标】替换为测试专用图标 - manifestPlaceholders = [ - appIcon: "@mipmap/ic_launcher_app_bat" // 需在main/res/mipmap放置该图标 - ] +// dimension "environment" +// // 测试版包名:基础包名 + .beta(com.example.myapp.beta) +// applicationIdSuffix ".beta" +// // 测试版版本名:1.0-beta +// versionNameSuffix "-beta" +// +// // 【测试版应用名称】动态生成带标识的名称 +// resValue "string", "app_name", "秘地-测试版" +// +// // 【测试版图标】替换为测试专用图标 +// manifestPlaceholders = [ +// appIcon: "@mipmap/ic_launcher_app_bat" // 需在main/res/mipmap放置该图标 +// ] } } diff --git a/gradle.properties b/gradle.properties index 1092726..1902428 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,8 +28,8 @@ isBuildModule=false #org.gradle.deamon=false android.injected.testOnly=false -APP_VERSION_NAME=1.1.6 -APP_VERSION_CODE=168 +APP_VERSION_NAME=1.1.7 +APP_VERSION_CODE=169 org.gradle.jvm.toolchain.useLegacyAdapters=false #org.gradle.java.home=C\:\\Users\\qx\\.jdks\\ms-17.0.15 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java b/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java index b8397ab..2422566 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/activity/BaseAppCompatActivity.java @@ -18,6 +18,9 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.style.ForegroundColorSpan; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; @@ -37,6 +40,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; @@ -50,6 +54,7 @@ import com.xscm.moduleutil.R; import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.base.RoomManager; import com.xscm.moduleutil.bean.XLHBean; +import com.xscm.moduleutil.event.HourlyBean; import com.xscm.moduleutil.event.MqttBean; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.BackgroundManager; @@ -66,6 +71,7 @@ import org.greenrobot.eventbus.ThreadMode; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -410,6 +416,232 @@ public abstract class BaseAppCompatActivity extends private View currentMqttView = null; // 当前正在播放的MQTT视图 private View currentXlhView = null; // 当前正在播放的XLH视图 + private final List hourlyMessageQueue = new ArrayList<>(); // 小时榜消息队列 + private final Map currentHourlyViews = new HashMap<>(); // 当前显示的小时榜视图 + private final Object hourlyQueueLock = new Object(); // 小时榜队列同步锁 + private boolean isHourlyProcessing = false; // 小时榜处理状态标志 + + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageReceived(List hourlyBean) { + LogUtils.e("收到小时榜", hourlyBean); + if (hourlyBean == null) return; + if (SpUtil.getFloatingScreen() == 1) { + synchronized (hourlyQueueLock) { + hourlyMessageQueue.addAll(hourlyBean); + if (!isHourlyProcessing) { + isHourlyProcessing = true; + processHourlyMessages(); + } + } + }else { + hourlyMessageQueue.clear(); + clearAllHourlyViews(); + } + } + + private void processHourlyMessages() { + List messagesToProcess; + synchronized (hourlyQueueLock) { + if (hourlyMessageQueue.isEmpty()) { + isHourlyProcessing = false; + return; + } + // 最多处理3条数据 + int processCount = Math.min(3, hourlyMessageQueue.size()); + messagesToProcess = new ArrayList<>(hourlyMessageQueue.subList(0, processCount)); + // 从队列中移除已处理的数据 + for (int i = 0; i < processCount; i++) { + hourlyMessageQueue.remove(0); + } + } + + // 同时展示多条数据 + for (int i = 0; i < messagesToProcess.size(); i++) { + HourlyBean bean = messagesToProcess.get(i); + showHourlyFloatingMessage(bean, i); + } + } + + private void showHourlyFloatingMessage(HourlyBean hourlyBean, int positionIndex) { + try { + ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); + + // 创建新的视图 + View hourlyView = LayoutInflater.from(this).inflate(R.layout.item_hourly_floating, null); + FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT); + + // 根据位置设置不同的垂直间距 + int baseMargin = com.sunfusheng.marqueeview.DisplayUtil.dip2px(this, 70); + int verticalSpacing = com.sunfusheng.marqueeview.DisplayUtil.dip2px(this, 50); + layoutParams.topMargin = baseMargin + (positionIndex * verticalSpacing); + layoutParams.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; + hourlyView.setLayoutParams(layoutParams); + + decorView.addView(hourlyView); + + // 保存视图引用 + currentHourlyViews.put(positionIndex, hourlyView); + + // 更新视图数据 + updateHourlyFloatingViewData(hourlyView, hourlyBean); + + // 根据类型获取展示时间 + long displayDuration = getDisplayDurationByType(Integer.parseInt(hourlyBean.getRank_number())); + + // 启动动画 + resetAndStartHourlyAnimation(hourlyView, displayDuration, () -> { + // 动画结束后清理视图 + if (hourlyView.getParent() != null) { + decorView.removeView(hourlyView); + } + currentHourlyViews.remove(positionIndex); + + // 检查是否还有更多消息需要处理 + synchronized (hourlyQueueLock) { + if (hourlyMessageQueue.isEmpty() && currentHourlyViews.isEmpty()) { + isHourlyProcessing = false; + } else if (!hourlyMessageQueue.isEmpty() && currentHourlyViews.isEmpty()) { + // 所有当前视图都已消失,处理下一批消息 + processHourlyMessages(); + } + } + }); + } catch (Exception e) { + LogUtils.e("显示小时榜飘屏失败", e); + } + } + + private long getDisplayDurationByType(int type) { + // 根据不同类型设置不同的展示时间(毫秒) + switch (type) { + case 1: // 第一名 + return 5000; // 5秒 + case 2: // 第二名 + return 4000; // 4秒 + case 3: // 第三名 + return 3000; // 3秒 + default: + return 3000; // 默认3秒 + } + } + + private void updateHourlyFloatingViewData(View view, HourlyBean hourlyBean) { + TextView tvName = view.findViewById(R.id.tv_name); + ImageView ivAvatar = view.findViewById(R.id.im_h_t); + + if (hourlyBean != null) { + // 根据排名设置不同的显示 + switch (hourlyBean.getRank_number()) { + case "1": +// tvName.setText("新科状元! ["+hourlyBean.getRoom_name()+"] 独占鳌头!"); + setColoredText(tvName, "新科状元! [", hourlyBean.getRoom_name(), "] 独占鳌头!", R.color.color_FFFA63); + ivAvatar.setImageResource(R.mipmap.hourl_top1); + break; + case "2": +// tvName.setText("金榜榜眼! ["+hourlyBean.getRoom_name()+"] 才气逼人!"); + setColoredText(tvName, "金榜榜眼! [", hourlyBean.getRoom_name(), "] 才气逼人!", R.color.color_FFFA63); + + ivAvatar.setImageResource(R.mipmap.hourl_top2); + break; + case "3": + setColoredText(tvName, "风采探花! [", hourlyBean.getRoom_name(), "] 实力绽放!", R.color.color_1FFFE5); +// tvName.setText("风采探花! ["+hourlyBean.getRoom_name()+"] 实力绽放!"); + + ivAvatar.setImageResource(R.mipmap.hourl_top3); + break; + default: + + break; + } + + } + } + // 设置带颜色的文本 + // 设置带颜色的文本 + private void setColoredText(TextView textView, String prefix, String roomName, String suffix, int colorRes) { + String fullText = prefix + roomName + suffix; + SpannableStringBuilder builder = new SpannableStringBuilder(fullText); + + // 先为整个文本设置白色 + builder.setSpan( + new ForegroundColorSpan(ContextCompat.getColor(this, R.color.white)), + 0, + fullText.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ); + + // 查找房间名在文本中的位置 + int start = fullText.indexOf("["); + int end = fullText.indexOf("]") + 1; + + if (start >= 0 && end > start) { + // 为房间名部分设置指定颜色 + builder.setSpan( + new ForegroundColorSpan(ContextCompat.getColor(this, colorRes)), + start, + end, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ); + } + + textView.setText(builder); + } + + private void resetAndStartHourlyAnimation(View view, long displayDuration, Runnable onAnimationEnd) { + try { + int screenWidth = getScreenWidth(); + // 设置初始位置:在屏幕右侧外部 + view.setTranslationX(screenWidth); + + // 进入动画 + ObjectAnimator enterAnimator = ObjectAnimator.ofFloat(view, "translationX", screenWidth, 0f); + enterAnimator.setDuration(500); + enterAnimator.setInterpolator(new DecelerateInterpolator()); + enterAnimator.start(); + + // 停留后退出动画 + view.postDelayed(() -> { + try { + ObjectAnimator exitAnimator = ObjectAnimator.ofFloat(view, "translationX", 0f, -screenWidth); + exitAnimator.setDuration(500); + exitAnimator.setInterpolator(new AccelerateInterpolator()); + exitAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + onAnimationEnd.run(); + } + + @Override + public void onAnimationCancel(Animator animation) { + onAnimationEnd.run(); + } + }); + exitAnimator.start(); + } catch (Exception e) { + LogUtils.e("小时榜退出动画执行失败", e); + onAnimationEnd.run(); + } + }, displayDuration); // 根据类型设置的展示时间 + + } catch (Exception e) { + LogUtils.e("小时榜动画启动失败", e); + onAnimationEnd.run(); + } + } + + private void clearAllHourlyViews() { + ViewGroup decorView = (ViewGroup) getWindow().getDecorView(); + for (View view : currentHourlyViews.values()) { + if (view.getParent() != null) { + decorView.removeView(view); + } + } + currentHourlyViews.clear(); + } + /// 礼物特效 - MQTT消息处理 @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageReceived(MqttBean mqttBean) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java index c6a7af5..7af752a 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java @@ -114,6 +114,8 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio // 添加后台状态标记 private boolean wasInBackground = false; + public boolean isMai=false; + public void onAppBackground() { wasInBackground = true; } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomHourBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomHourBean.java new file mode 100644 index 0000000..6221d4d --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomHourBean.java @@ -0,0 +1,27 @@ +package com.xscm.moduleutil.bean.room; + +import lombok.Data; + +import java.util.List; +/** + *@author qx + *@data 2025/9/29 + *@description:小时榜实体类 + */ +@Data +public class RoomHourBean { + private String time_range; + private List lists; + + @Data + public class RoomListBean { + private String room_id; + private String room_name; + private int label_id; + private String room_cover; + private int total_price; + private String label_icon; + private int xlh_status; + } + +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java index f9bb504..0729ea3 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomInfoResp.java @@ -30,6 +30,7 @@ public class RoomInfoResp implements Serializable { private List song_pit_list; private FriendInfo friend_info; private GiftXlh gift_cycle; + private int hour_ranking_open;//1:开启 0:关闭 //弹出麦位操作弹出 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java new file mode 100644 index 0000000..afe1d96 --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/event/HourlyBean.java @@ -0,0 +1,14 @@ +package com.xscm.moduleutil.event; + +import lombok.Data; + +/** + * 小时榜飘屏 + */ +@Data +public class HourlyBean { + private String room_id; + private String room_name; + private String text; + private String rank_number; +} diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java index 72dfece..12effa2 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -63,13 +63,7 @@ import com.xscm.moduleutil.bean.WithdrawalBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindReslutBean; import com.xscm.moduleutil.bean.blindboxwheel.XlhDrawBean; -import com.xscm.moduleutil.bean.room.AuctionBean; -import com.xscm.moduleutil.bean.room.FriendUserBean; -import com.xscm.moduleutil.bean.room.RoomApplyListBean; -import com.xscm.moduleutil.bean.room.RoomAuction; -import com.xscm.moduleutil.bean.room.RoomBean; -import com.xscm.moduleutil.bean.room.RoomInfoResp; -import com.xscm.moduleutil.bean.room.RoomOnline; +import com.xscm.moduleutil.bean.room.*; import com.xscm.moduleutil.bean.zhuangb.ZhuangBanShangChengBean; import com.xscm.moduleutil.widget.Constants; @@ -95,6 +89,9 @@ public interface ApiServer { @POST(Constants.LOGIN) Call>> login(@Field("user_login") String user_login, @Field("sms_code") String sms_code); + @FormUrlEncoded + @POST(Constants.ROOM_HOUR_BEAN) + Call> getRoomHourRanking(@Field("page") String page,@Field("page_limit")String page_limit); @FormUrlEncoded //手机换绑 @POST(Constants.MODIFY_MOBILE) Call> mobileView(@Field("mobile") String mobile, @Field("new_mobile") String new_mobile, @Field("sms_code") String sms_code); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index 440b03d..378ebfa 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -80,13 +80,7 @@ import com.xscm.moduleutil.bean.WithdrawalBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindReslutBean; import com.xscm.moduleutil.bean.blindboxwheel.XlhDrawBean; -import com.xscm.moduleutil.bean.room.AuctionBean; -import com.xscm.moduleutil.bean.room.FriendUserBean; -import com.xscm.moduleutil.bean.room.RoomApplyListBean; -import com.xscm.moduleutil.bean.room.RoomAuction; -import com.xscm.moduleutil.bean.room.RoomBean; -import com.xscm.moduleutil.bean.room.RoomInfoResp; -import com.xscm.moduleutil.bean.room.RoomOnline; +import com.xscm.moduleutil.bean.room.*; import com.xscm.moduleutil.bean.zhuangb.ZhuangBanShangChengBean; import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.utils.SpUtil; @@ -351,6 +345,29 @@ public class RetrofitClient { }); } + public void getRoomHourRanking(String page, String page_limit, BaseObserver observer){ + sApiServer.getRoomHourRanking(page, page_limit).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200) { + BaseModel listBaseModel = response.body(); + if (listBaseModel != null) { + if (listBaseModel.getCode()==1) { + observer.onNext(listBaseModel.getData()); + }else { + ToastUtils.showShort(listBaseModel.getMsg()); + } + + } + } + } + @Override + public void onFailure(Call> call, Throwable t) { + t.printStackTrace(); + } + }); + } + public void userLogin(String mobile, String password, BaseObserver> observer) { sApiServer.userLogin(mobile, password).enqueue(new Callback>>() { @Override diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttConnect.java b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttConnect.java index acd5c93..d19e6b8 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttConnect.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttConnect.java @@ -31,6 +31,7 @@ public class MqttConnect { // 订阅主题 public static String shutdown = ""; public static String update_app = ""; + public static String qx_hour_ranking = ""; Handler handler = new Handler(Looper.getMainLooper()); String[] topic; int[] qos = {1,2,3,0,0,0,0,0,0,0,0,0,0}; // 消息质量 @@ -44,10 +45,12 @@ public class MqttConnect { // 这里是你自己需要订阅的主题 shutdown = "qx_room_topic"; // 关机 update_app = "qx_xunlehui"; // 发送更新APP + qx_hour_ranking = "qx_hour_ranking"; ArrayList topicList = new ArrayList<>(); topicList.add(shutdown); topicList.add(update_app); + topicList.add(qx_hour_ranking); topic = topicList.toArray(new String[0]); } @@ -82,6 +85,7 @@ public class MqttConnect { // sub(topic,qos); sub(shutdown); sub(update_app); + sub(qx_hour_ranking); // uiTip("MQTT连接成功"); }catch (MqttException e){ // uiTip("MQTT连接失败,准备重连。。。:"+e.getMessage()); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttInitCallback.java b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttInitCallback.java index bb1c37e..79e3763 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttInitCallback.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/service/MqttInitCallback.java @@ -12,6 +12,7 @@ import com.hjq.toast.ToastUtils; import com.orhanobut.logger.Logger; import com.xscm.moduleutil.bean.MqttXlhEnd; import com.xscm.moduleutil.bean.XLHBean; +import com.xscm.moduleutil.event.HourlyBean; import com.xscm.moduleutil.event.RoomGiftRunable; import com.xscm.moduleutil.utils.SpUtil; @@ -20,6 +21,8 @@ import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.greenrobot.eventbus.EventBus; +import java.util.List; + public class MqttInitCallback implements MqttCallback { private String Tag = "MqttInitCallback"; private String HOST; @@ -58,6 +61,59 @@ public class MqttInitCallback implements MqttCallback { } else if (topic.equals("qx_xunlehui")) { // ToastUtils.show("收到轮盘飘屏"); receiveXlhMessage(messageStr); + }else if (topic.equals("qx_hour_ranking")){ + receiveQXHourRanking(topic, messageStr); + } + } + + private void receiveQXHourRanking(String topic, String data) { + try { + JSONObject jsonObject = JSON.parseObject(data); + int type = jsonObject.getIntValue("type"); + String message = jsonObject.getString("msg"); + + // 将事件处理放到主线程执行 + new Handler(Looper.getMainLooper()).post(() -> { + processMessage(topic, message); + }); + } catch (Exception e) { + Log.e("MQTT", "解析MQTT消息异常", e); +// ToastUtils.show("收到礼物飘屏,解析异常"); + } + } + + private void processMessage(String topic, String data){ + try { + // 如果 data 是集合字符串 + if (isJsonArray(data)) { + // 解析为集合 + List dataList = JSON.parseArray(data, HourlyBean.class); + + // 在主线程处理集合数据 + new Handler(Looper.getMainLooper()).post(() -> { + processDataList(dataList); + }); + } + } catch (Exception e) { + Log.e("MQTT", "解析MQTT消息异常", e); + } + } + // 处理集合数据 + private void processDataList(List dataList) { + // 遍历集合并发送每个元素 +// for (HourlyBean dataItem : dataList) { +// EventBus.getDefault().post(dataItem); +// } + + // 或者发送整个集合 + EventBus.getDefault().post(dataList); + } + // 判断是否为 JSON 数组 + private boolean isJsonArray(String jsonString) { + try { + return JSON.parseArray(jsonString) != null; + } catch (Exception e) { + return false; } } private void receiveMessage(String topic, String data) { diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java index 6fac379..a1d591a 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/utils/config/EnvironmentPrefs.java @@ -51,11 +51,11 @@ public class EnvironmentPrefs { // } // 默认使用生产环境 - String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.TEST.name()); + String envName = sharedPreferences.getString(KEY_ENV, EnvironmentEnum.PRODUCTION.name()); try { return EnvironmentEnum.valueOf(envName); } catch (IllegalArgumentException e) { - return EnvironmentEnum.TEST; // 出错时默认返回生产环境 + return EnvironmentEnum.PRODUCTION; // 出错时默认返回生产环境 } } } \ No newline at end of file diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java index 450f3cc..ba101ee 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/BaseWheatView.java @@ -538,7 +538,7 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe @Subscribe(threadMode = ThreadMode.MAIN) @Override public void subscribeMessages(RoomBeckoningEvent roomBeckoningEvent) { - if (roomId.equals(roomBeckoningEvent.getRoomId())) { + if (roomId != null && roomId.equals(roomBeckoningEvent.getRoomId())) { mCharmView.setVisibility(roomBeckoningEvent.isOpen() ? VISIBLE : INVISIBLE); } } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java index aff2c81..cf73fac 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -392,6 +392,7 @@ public class Constants { public static final String GET_GIFT_PACK_LIST_COUNT = "/api/UserGiftPack/get_gift_pack_list_count";//背包礼物总价值 public static final String ROOM_USER_RECONNECT = "/api/Room/user_reconnect";//用户重连 public static final String USER_ROOM_BACK = "/api/Room/user_in_room_background";//用户在房间内切后台保留数据操作 + public static final String ROOM_HOUR_BEAN = "/api/RoomHourRanking/room_hour_ranking";//房间小时榜 diff --git a/moduleUtil/src/main/res/layout/item_hourly_floating.xml b/moduleUtil/src/main/res/layout/item_hourly_floating.xml new file mode 100644 index 0000000..0a0f55b --- /dev/null +++ b/moduleUtil/src/main/res/layout/item_hourly_floating.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/mipmap-xhdpi/hourly_xlh_sta.webp b/moduleUtil/src/main/res/mipmap-xhdpi/hourly_xlh_sta.webp new file mode 100644 index 0000000..b35e97e Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xhdpi/hourly_xlh_sta.webp differ diff --git a/moduleUtil/src/main/res/mipmap-xhdpi/top1.png b/moduleUtil/src/main/res/mipmap-xhdpi/top1.png new file mode 100644 index 0000000..d72b1dd Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xhdpi/top1.png differ diff --git a/moduleUtil/src/main/res/mipmap-xhdpi/top2.png b/moduleUtil/src/main/res/mipmap-xhdpi/top2.png new file mode 100644 index 0000000..1f22194 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xhdpi/top2.png differ diff --git a/moduleUtil/src/main/res/mipmap-xhdpi/top3.png b/moduleUtil/src/main/res/mipmap-xhdpi/top3.png new file mode 100644 index 0000000..1722d49 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xhdpi/top3.png differ diff --git a/moduleUtil/src/main/res/mipmap-xxhdpi/dcl.png b/moduleUtil/src/main/res/mipmap-xxhdpi/dcl.png new file mode 100644 index 0000000..c481a85 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xxhdpi/dcl.png differ diff --git a/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top1.webp b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top1.webp new file mode 100644 index 0000000..f4a4362 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top1.webp differ diff --git a/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top2.webp b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top2.webp new file mode 100644 index 0000000..b01dab6 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top2.webp differ diff --git a/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top3.webp b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top3.webp new file mode 100644 index 0000000..e68d1a9 Binary files /dev/null and b/moduleUtil/src/main/res/mipmap-xxxhdpi/hourl_top3.webp differ diff --git a/moduleUtil/src/main/res/values/colors.xml b/moduleUtil/src/main/res/values/colors.xml index a569f84..6444629 100644 --- a/moduleUtil/src/main/res/values/colors.xml +++ b/moduleUtil/src/main/res/values/colors.xml @@ -23,6 +23,8 @@ #ffe5f7 #FF8ACC #45D08C + #1FFFE5 + #FFFA63 #959595 #FF2727 diff --git a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt index c9b6fa5..dd4c50e 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt +++ b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.kt @@ -48,8 +48,10 @@ import com.blankj.utilcode.util.ThreadUtils import com.blankj.utilcode.util.TimeUtils import com.chad.library.adapter.base.BaseQuickAdapter import com.example.moduleroom.R + import com.example.moduleroom.contacts.RoomContacts import com.example.moduleroom.databinding.ActivityRoomBinding + import com.example.moduleroom.dialog.ExitRoomBottomSheet import com.example.moduleroom.dialog.ExitRoomBottomSheet.OnOptionSelectedListener import com.example.moduleroom.dialog.FriendsDialogFragment @@ -677,7 +679,6 @@ class RoomActivity : BaseMvpActivity(), } - private val imSdkListener = object : V2TIMSDKListener() { override fun onConnecting() {} @@ -970,6 +971,12 @@ class RoomActivity : BaseMvpActivity(), newDialog.show(fm, "TourClubDialogFragment") } } + + mBinding!!.clXsb.visibility = View.GONE + mBinding!!.tvXlh.setOnClickListener { view -> + val fragment = HourlyChartDialog.newInstance() + fragment.show(supportFragmentManager, "HourlyChartDialog") + } } private fun onGiftGiveProgressClcik() { @@ -1411,12 +1418,13 @@ class RoomActivity : BaseMvpActivity(), // ToastUtils.showShort("点击了房间,事件穿透"); } - mBinding!!.roomTop.clXsb.setOnClickListener { - val fragment = HourlyChartDialog.newInstance() - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } - } +// mBinding!!.clXsb.setOnClickListener { +// val fragment = HourlyChartDialog.newInstance() +// fragment.show(supportFragmentManager,"HourlyChartDialog") +// if (fragment != null) { +// addActiveDialogFragment(fragment) // 添加到管理列表 +// } +// } } @@ -1545,7 +1553,7 @@ class RoomActivity : BaseMvpActivity(), roomFragment!!.handleMsgType1028(messageEvent) } else if (msgType == 1058) { var userId = messageEvent!!.text!!.user_id!! - LogUtils.e("messageEvent!!.text.type"+messageEvent!!.text.type) + LogUtils.e("messageEvent!!.text.type" + messageEvent!!.text.type) CommonAppContext.getInstance().onlineMap.set( userId?.toString() ?: "", messageEvent!!.text.type @@ -1999,7 +2007,7 @@ class RoomActivity : BaseMvpActivity(), if ("2" == labelId) { roomFragment!!.KtvFragmentEvent(messageEvent) } else if ("1" == labelId) { - mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt()-1, getPitBean(messageEvent)) + mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt() - 1, getPitBean(messageEvent)) roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment!!.SingSongEvent(messageEvent) } @@ -2076,7 +2084,7 @@ class RoomActivity : BaseMvpActivity(), if ("2" == labelId) { roomFragment!!.KtvFragmentEvent(messageEvent) } else if ("1" == labelId) { - mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt()-1, getPitBean2(messageEvent,pitNumber)) + mRoomInfoResp!!.room_info.pit_list.set(pitNumber.toInt() - 1, getPitBean2(messageEvent, pitNumber)) roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment!!.SingSongEvent(messageEvent) if (mRoomInfoResp!!.user_info.user_id == SpUtil.getUserId().toString() + "") { @@ -2959,12 +2967,14 @@ class RoomActivity : BaseMvpActivity(), isSwith = false AgoraManager.getInstance(this).muteLocalAudioStream(false) AgoraManager.getInstance(this).ClientRole(true) + CommonAppContext.getInstance().isMai = true } else { mBinding!!.ivMic.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone_off) AgoraManager.getInstance(this) .setLocalAudioEnabled(false, SpUtil.getUserId().toString() + "") isSwith = true isMute(1) + CommonAppContext.getInstance().isMai = false } } @@ -3389,10 +3399,14 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.xlhRk.visibility = View.INVISIBLE releaseCountDownTimer1() } -// tzblChanged() - // sharedViewModel.setDataForFragment(mRoomInfoResp); -// + + if (mRoomInfoResp!!.hour_ranking_open == 1) { + mBinding!!.clXsb.visibility = View.VISIBLE + } else { + mBinding!!.clXsb.visibility = View.GONE + } } + protected fun tzblChanged() { // mBinding.dhv9.updateTzbl(SpUtil.getTzbl(roomId)); @@ -3674,7 +3688,8 @@ class RoomActivity : BaseMvpActivity(), // customMusicFloatingView.initView(); customMusicFloatingView!!.show() // 等待 View 创建完成后才绑定点击事件 - ViewUtils.waitUntilViewReady(musicWindowControl!!, + ViewUtils.waitUntilViewReady( + musicWindowControl!!, OnViewCreatedListener { view: View? -> customMusicFloatingView!!.initView() // 这里 fxControl.getView() 不再为 null customMusicFloatingView!!.updatePlayState(false) @@ -3692,15 +3707,20 @@ class RoomActivity : BaseMvpActivity(), CommonAppContext.getInstance().isRoomJoininj = false // 当Activity恢复时,重置标记 userLeaving = true - RetrofitClient.getInstance().roomUserReconnect(CommonAppContext.getInstance().playId) - if(CommonAppContext.getInstance().onConnectFailed){//判断是否有有过断开腾讯IM - CommonAppContext.getInstance().onConnectFailed=false - if (CommonAppContext.getInstance().playId!=null && !CommonAppContext.getInstance().playId.isEmpty()) { //判断是否有roomId - LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) - MvpPre!!.postRoomInfo(CommonAppContext.getInstance().playId)//当有过断开,然后重新连接 - LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) +// RetrofitClient.getInstance().roomUserReconnect(CommonAppContext.getInstance().playId)//重连腾讯IM +// if(CommonAppContext.getInstance().onConnectFailed){//判断是否有有过断开腾讯IM +// CommonAppContext.getInstance().onConnectFailed=false +// if (CommonAppContext.getInstance().playId!=null && !CommonAppContext.getInstance().playId.isEmpty()) { //判断是否有roomId +// LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) +// MvpPre!!.postRoomInfo(CommonAppContext.getInstance().playId)//当有过断开,然后重新连接 +// LogUtils.e("RoomActivity", "onResume playId:"+CommonAppContext.getInstance().playId) +// +// } +// } - } + if (isInBackground) { + isInBackground = false + MvpPre!!.postRoomInfo(CommonAppContext.getInstance().playId) } // // 正常启动或从后台恢复 @@ -3963,7 +3983,9 @@ class RoomActivity : BaseMvpActivity(), AgoraManager.stopMuisc() - initializeAudio() + if (!CommonAppContext.getInstance().isMai) { + initializeAudio() + } if (mRoomInfoResp!!.room_info.label_id == "2" || mRoomInfoResp!!.room_info.type_id == "7") { mBinding!!.rlMore.visibility = View.GONE @@ -3979,6 +4001,12 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.rlMore.visibility = View.GONE mBinding!!.rlMisc.visibility = View.GONE } + + if (mRoomInfoResp!!.hour_ranking_open == 1) { + mBinding!!.clXsb.visibility = View.VISIBLE + } else { + mBinding!!.clXsb.visibility = View.GONE + } } fun upHeight() { diff --git a/moduleroom/src/main/java/com/example/moduleroom/adapter/RoomHourlyAdapter.java b/moduleroom/src/main/java/com/example/moduleroom/adapter/RoomHourlyAdapter.java new file mode 100644 index 0000000..e09e061 --- /dev/null +++ b/moduleroom/src/main/java/com/example/moduleroom/adapter/RoomHourlyAdapter.java @@ -0,0 +1,61 @@ +package com.example.moduleroom.adapter; + +import android.view.View; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.example.moduleroom.R; +import com.xscm.moduleutil.bean.room.RoomHourBean; +import com.xscm.moduleutil.utils.ImageUtils; + +public class RoomHourlyAdapter extends BaseQuickAdapter { + public RoomHourlyAdapter() { + super(R.layout.item_hourly); + } + + // 定义点击监听器接口 + public interface OnItemClickListener { + void onItemClick(RoomHourBean.RoomListBean item, int position); + } + + private OnItemClickListener mOnItemClickListener; + + // 设置监听器的方法 + public void setOnItemClickListener(OnItemClickListener listener) { + this.mOnItemClickListener = listener; + } + + @Override + protected void convert(BaseViewHolder baseViewHolder, RoomHourBean.RoomListBean roomListBean) { + // 获取当前项的索引 + int position = baseViewHolder.getAdapterPosition(); + if (position == 0){ + baseViewHolder.setBackgroundRes(R.id.tv_num, com.xscm.moduleutil.R.mipmap.top1); + }else if (position == 1){ + baseViewHolder.setBackgroundRes(R.id.tv_num, com.xscm.moduleutil.R.mipmap.top2); + }else if (position == 2){ + baseViewHolder.setBackgroundRes(R.id.tv_num, com.xscm.moduleutil.R.mipmap.top3); + }else { + baseViewHolder.setText(R.id.tv_num, position+1+""); + } + + ImageUtils.loadHeadCC(roomListBean.getRoom_cover(), baseViewHolder.getView(R.id.room_tx)); + if (roomListBean.getXlh_status()==1){ + baseViewHolder.getView(R.id.im_xlh).setVisibility(View.VISIBLE); + baseViewHolder.setImageResource(R.id.im_xlh, com.xscm.moduleutil.R.mipmap.hourly_xlh_status); + }else if (roomListBean.getXlh_status()==2){ + baseViewHolder.getView(R.id.im_xlh).setVisibility(View.VISIBLE); + baseViewHolder.setImageResource(R.id.im_xlh, com.xscm.moduleutil.R.mipmap.hourly_xlh_sta); + }else { + baseViewHolder.getView(R.id.im_xlh).setVisibility(View.GONE); + } + baseViewHolder.setText(R.id.room_name, roomListBean.getRoom_name()); + ImageUtils.loadHeadCC(roomListBean.getLabel_icon(), baseViewHolder.getView(R.id.iv_type)); + baseViewHolder.setText(R.id.room_hr, roomListBean.getTotal_price()+""); +// 为整个item设置点击事件 + baseViewHolder.itemView.setOnClickListener(v -> { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(roomListBean, position); + } + }); + } +} diff --git a/moduleroom/src/main/java/com/example/moduleroom/contacts/HourlyChartContacts.java b/moduleroom/src/main/java/com/example/moduleroom/contacts/HourlyChartContacts.java index 4b38047..74f6f60 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/contacts/HourlyChartContacts.java +++ b/moduleroom/src/main/java/com/example/moduleroom/contacts/HourlyChartContacts.java @@ -4,13 +4,16 @@ import android.app.Activity; import com.xscm.moduleutil.activity.IPresenter; import com.xscm.moduleutil.activity.IView; +import com.xscm.moduleutil.bean.room.RoomHourBean; public class HourlyChartContacts { public interface View extends IView { + void getRoomHourRanking(RoomHourBean roomHourBean); + void findView(); } public interface IRoomPre extends IPresenter { - + void getRoomHourRanking(String page,String page_limit);// 房间小时榜 } } diff --git a/moduleroom/src/main/java/com/example/moduleroom/dialog/HourlyChartDialog.java b/moduleroom/src/main/java/com/example/moduleroom/dialog/HourlyChartDialog.java index b00a9ac..4302e1f 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/dialog/HourlyChartDialog.java +++ b/moduleroom/src/main/java/com/example/moduleroom/dialog/HourlyChartDialog.java @@ -1,17 +1,37 @@ package com.example.moduleroom.dialog; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.Gravity; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; import com.example.moduleroom.R; +import com.example.moduleroom.adapter.RoomHourlyAdapter; import com.example.moduleroom.contacts.HourlyChartContacts; import com.example.moduleroom.databinding.DialogHourlyChartFragmentBinding; import com.example.moduleroom.presenter.HourlyChartPresenter; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; import com.xscm.moduleutil.activity.IPresenter; +import com.xscm.moduleutil.adapter.CirleListAdapter; import com.xscm.moduleutil.base.BaseMvpDialogFragment; +import com.xscm.moduleutil.base.RoomManager; +import com.xscm.moduleutil.bean.room.RoomHourBean; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; + /** *@author qx *@data 2025/9/29 *@description:小时榜 */ public class HourlyChartDialog extends BaseMvpDialogFragment implements HourlyChartContacts.View { + private int page; + + private RoomHourlyAdapter roomHourlyAdapter; + @Override protected HourlyChartPresenter bindPresenter() { return new HourlyChartPresenter( this, getActivity()); @@ -27,14 +47,98 @@ public class HourlyChartDialog extends BaseMvpDialogFragment dismiss()); } @Override protected int getLayoutId() { return R.layout.dialog_hourly_chart_fragment; } + + @Override + public void getRoomHourRanking(RoomHourBean roomHourBean) { + if (roomHourBean!=null){ + mBinding.tvHourlyDjs.setText("榜单时间 "+roomHourBean.getTime_range()); + if (page == 1) { + if (roomHourBean.getLists() != null && !roomHourBean.getLists().isEmpty()) { + roomHourlyAdapter.setNewData(roomHourBean.getLists()); + } else { + roomHourlyAdapter.setNewData(new ArrayList<>()); // 清空旧数据并提示空状态 + } + } else { + if (roomHourBean.getLists() != null && !roomHourlyAdapter.getData().isEmpty()) { + roomHourlyAdapter.addData(roomHourBean.getLists()); + } else { + // 没有更多数据时可调用 finishLoadMoreWithNoMoreData() + mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData(); + } + } + } + } + + @Override + public void findView() { + mBinding.smartRefreshLayout.finishLoadMore() ; + mBinding.smartRefreshLayout.finishRefresh(); + } } diff --git a/moduleroom/src/main/java/com/example/moduleroom/presenter/HourlyChartPresenter.java b/moduleroom/src/main/java/com/example/moduleroom/presenter/HourlyChartPresenter.java index 9e0be60..36484cf 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/presenter/HourlyChartPresenter.java +++ b/moduleroom/src/main/java/com/example/moduleroom/presenter/HourlyChartPresenter.java @@ -4,10 +4,40 @@ import android.content.Context; import com.example.moduleroom.contacts.BidListContacts; import com.example.moduleroom.contacts.HourlyChartContacts; +import com.xscm.moduleutil.bean.room.RoomHourBean; +import com.xscm.moduleutil.http.BaseObserver; import com.xscm.moduleutil.presenter.BasePresenter; +import io.reactivex.disposables.Disposable; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; public class HourlyChartPresenter extends BasePresenter implements HourlyChartContacts.IRoomPre{ + + HourlyChartContacts.View mView; public HourlyChartPresenter(HourlyChartContacts.View view, Context context) { super(view, context); + this.mView=view; + } + + + + @Override + public void getRoomHourRanking(String page, String page_limit) { + api.getRoomHourRanking(page, page_limit, new BaseObserver() { + @Override + public void onSubscribe(@NotNull Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(@NotNull RoomHourBean roomHourBean) { + if (MvpRef==null){ + MvpRef=new WeakReference<>(mView); + } + MvpRef.get().getRoomHourRanking(roomHourBean); + MvpRef.get().findView(); + } + }); } } diff --git a/moduleroom/src/main/res/layout/activity_room.xml b/moduleroom/src/main/res/layout/activity_room.xml index 8463aa7..bcc2130 100644 --- a/moduleroom/src/main/res/layout/activity_room.xml +++ b/moduleroom/src/main/res/layout/activity_room.xml @@ -1,245 +1,245 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:context=".activity.RoomActivity"> - - - - - - - + android:keepScreenOn="true"> - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent"/> + + + + + + + + + + + + + + + + + + + android:id="@+id/svga_ride" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:minHeight="@dimen/dp_80"/> - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + + android:id="@+id/input_menu1" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"/> + android:id="@+id/ll_bottom" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/dp_15" + android:animateLayoutChanges="true" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingLeft="@dimen/dp_16" + android:paddingRight="@dimen/dp_16" + app:layout_constraintBottom_toTopOf="@+id/input_menu1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + android:layout_width="0dp" + android:layout_height="@dimen/dp_36" + android:layout_weight="1.4" + android:background="@drawable/room_bottom_bg" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingLeft="@dimen/dp_5" + android:paddingRight="@dimen/dp_5"> + android:id="@+id/iv_emoji" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_marginLeft="@dimen/dp_5" + android:src="@mipmap/mess"/> + android:id="@+id/iv_chat" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/dp_10" + android:layout_marginRight="@dimen/dp_10" + android:text="说点什么" + android:textColor="#80ffffff" + android:textSize="@dimen/sp_13"/> + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="0.2"/> + android:id="@+id/rl_voive" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3"> + android:id="@+id/im_voive" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_voice_kg"/> + android:id="@+id/rl_mic" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3" + android:gravity="center_vertical"> + android:id="@+id/iv_mic" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_microphone_off" + android:visibility="visible" + tools:visibility="visible"/> + android:id="@+id/rl_message" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3"> + android:id="@+id/iv_message" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_message" + android:visibility="visible"/> @@ -251,426 +251,450 @@ + android:id="@+id/iv_message_dot" + android:layout_width="@dimen/dp_14" + android:layout_height="@dimen/dp_14" + android:layout_alignParentEnd="true" + android:background="@drawable/ease_bg_msg_count" + android:gravity="center" + android:paddingLeft="@dimen/dp_5" + android:paddingTop="1.5dp" + android:paddingRight="@dimen/dp_5" + android:paddingBottom="2dp" + android:textColor="@color/white" + android:textSize="@dimen/sp_8" + android:visibility="gone" + tools:text="99+" + tools:visibility="visible"/> + android:id="@+id/rl_more" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3"> + android:id="@+id/iv_more" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_pk"/> + android:id="@+id/rl_misc" + android:layout_width="0dp" + android:layout_height="20dp" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3"> + android:id="@+id/iv_misc" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_mis"/> + android:id="@+id/rl_gift" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" + android:layout_weight="0.3"> + android:id="@+id/iv_gift" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_gift"/> + android:id="@+id/rl_sett" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="0.3"> + android:id="@+id/iv_sett" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_centerInParent="true" + android:src="@mipmap/room_sett"/> + android:id="@+id/ll_input" + android:layout_width="0dp" + android:layout_height="0dp" + android:orientation="horizontal" + app:layout_constraintBottom_toTopOf="@id/ll_bottom" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> - - - - - - - - + android:id="@+id/svga_gift" + android:layout_width="0dp" + android:layout_height="0dp" + android:background="@color/transparent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + + + + + + + + - - - - - - - - + + + + + + + + + android:id="@+id/gift_show_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="200dp" + android:layout_marginEnd="15dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@+id/cl_first_charge" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + android:id="@+id/gift_show_progress_img" + android:layout_width="40dp" + android:layout_height="40dp" + android:src="@mipmap/default_avatar" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/gift_show_progress" + android:layout_width="60dp" + android:layout_height="60dp" + app:backColor="#FF9800" + app:backWidth="3dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:progColor="#888888" + app:progWidth="3dp" + app:progress="0"/> - - + android:id="@+id/cl_first_charge" + android:layout_width="@dimen/dp_98" + android:layout_height="@dimen/dp_43" + android:layout_marginBottom="@dimen/dp_14" + android:visibility="gone" + app:layout_constraintBottom_toTopOf="@+id/iv_sound_effects" + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="visible"> + android:id="@+id/iv_first_charge" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerInside" + android:src="@mipmap/paimai" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/tv_first_charge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_34" + android:gravity="center" + android:text="排麦模式" + android:textColor="#FFFFFF" + android:textSize="12sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/iv_first_charge" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/tv_first" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_15" + android:textColor="#FFFFFF" + android:textSize="12sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_first_charge" + tools:text="0人排队"/> + android:id="@+id/iv_sound_effects" + android:layout_width="@dimen/dp_46" + android:layout_height="@dimen/dp_78" + android:layout_marginEnd="@dimen/dp_16" + android:layout_marginBottom="@dimen/dp_14" + android:src="@mipmap/room_sound_effects" + android:visibility="gone" + app:layout_constraintBottom_toTopOf="@+id/iv_wheat_feeding" + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="visible"/> - - - - + android:id="@+id/iv_wheat_feeding" + android:layout_width="@dimen/dp_56" + android:layout_height="@dimen/dp_27" + android:layout_marginEnd="@dimen/dp_16" + android:layout_marginBottom="@dimen/dp_100" + android:src="@mipmap/room_wheat_feeding" + android:translationZ="@dimen/dp_2" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="visible"/> + + android:id="@+id/xlh_rk" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_10" + android:layout_marginBottom="@dimen/dp_100" + android:background="@color/transparent" + android:gravity="center_vertical|center" + android:orientation="vertical" + android:visibility="invisible" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + android:id="@+id/xlh_im" + android:layout_width="@dimen/dp_80" + android:layout_height="@dimen/dp_80" + android:layout_gravity="center_vertical" + android:src="@mipmap/xlh_rk_bj" + app:riv_oval="true"/> + android:id="@+id/tv_djs" + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_18" + android:layout_gravity="center_vertical" + android:textColor="#FFEBBD" + android:textSize="@dimen/sp_12" + android:visibility="visible" + tools:text="倒计时:12:12"/> + + + + + + + + + + android:id="@+id/flaoat" + android:layout_width="@dimen/dp_240" + android:layout_height="@dimen/dp_135" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + android:id="@+id/fl_screenshare" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + android:id="@+id/iv_quan" + android:layout_width="@dimen/dp_18" + android:layout_height="@dimen/dp_18" + android:layout_gravity="end|bottom" + android:layout_marginEnd="@dimen/dp_16" + android:layout_marginBottom="@dimen/dp_5" + android:src="@mipmap/quan" + android:translationZ="10dp"/> + > + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_65" + android:layout_gravity="center" + android:gravity="center" + android:orientation="horizontal"> + android:id="@+id/cl" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="-5dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/im_hq"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="fitXY" + android:src="@mipmap/headline_b" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/head_avate" + android:layout_width="@dimen/dp_28" + android:layout_height="@dimen/dp_28" + android:layout_marginStart="@dimen/dp_26" + android:src="@mipmap/default_avatar" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:riv_oval="true"/> + android:id="@+id/headName" + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_18" + android:layout_marginStart="@dimen/dp_4" + android:text="名称" + android:textColor="@color/color_FFFFF0F0" + android:textSize="@dimen/sp_12" + app:layout_constraintStart_toEndOf="@+id/head_avate" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/head_cone" + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_18" + android:layout_marginStart="@dimen/dp_4" + android:gravity="center" + android:text="内容" + android:textColor="@color/color_FFFFF0F0" + android:textSize="@dimen/sp_12" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/head_avate" + app:layout_constraintTop_toBottomOf="@+id/headName"/> + android:id="@+id/iv_quan_qiang" + android:layout_width="@dimen/dp_22" + android:layout_height="@dimen/dp_22" + android:src="@mipmap/tt_q" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/im_yc" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/iv_quan_c" + android:layout_width="@dimen/dp_22" + android:layout_height="@dimen/dp_22" + android:layout_marginEnd="@dimen/dp_8" + android:src="@mipmap/tt_c" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/iv_quan_qiang" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/im_yc" + android:layout_width="@dimen/dp_22" + android:layout_height="@dimen/dp_22" + android:src="@mipmap/tt_yc" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + android:id="@+id/im_hq" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:scaleType="fitXY" + android:src="@mipmap/heab_t" + android:visibility="visible" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> @@ -678,25 +702,25 @@ + android:id="@+id/fullscreen_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/black" + android:visibility="gone"/> + android:id="@+id/iv_exit_fullscreen" + android:layout_width="@dimen/dp_24" + android:layout_height="@dimen/dp_24" + android:layout_gravity="start|top" + android:layout_marginStart="@dimen/dp_16" + android:layout_marginTop="@dimen/dp_16" + android:layout_marginEnd="@dimen/dp_50" + android:layout_marginBottom="@dimen/dp_46" + android:src="@mipmap/quan" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> \ No newline at end of file diff --git a/moduleroom/src/main/res/layout/dialog_hourly_chart_fragment.xml b/moduleroom/src/main/res/layout/dialog_hourly_chart_fragment.xml index c434381..47ef3f7 100644 --- a/moduleroom/src/main/res/layout/dialog_hourly_chart_fragment.xml +++ b/moduleroom/src/main/res/layout/dialog_hourly_chart_fragment.xml @@ -1,67 +1,90 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> - - - - - - - - + android:layout_height="match_parent" + android:background="@android:color/transparent"> - - + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/moduleroom/src/main/res/layout/item_hourly.xml b/moduleroom/src/main/res/layout/item_hourly.xml index 0ba8f81..506098c 100644 --- a/moduleroom/src/main/res/layout/item_hourly.xml +++ b/moduleroom/src/main/res/layout/item_hourly.xml @@ -1,84 +1,89 @@ - + - - - - + android:id="@+id/room_tx" + android:layout_width="@dimen/dp_64" + android:layout_height="@dimen/dp_64" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + android:layout_marginStart="@dimen/dp_21" + android:src="@mipmap/default_avatar" + app:riv_corner_radius="@dimen/dp_6" + android:background="@drawable/bg_r6_000ff"/> + + + - + android:id="@+id/im_xlh" + android:layout_width="@dimen/dp_44" + android:layout_height="@dimen/dp_48" + android:src="@mipmap/hourly_xlh_status" + android:scaleType="fitCenter" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintEnd_toEndOf="parent" + android:layout_marginEnd="@dimen/dp_8" + android:layout_marginTop="@dimen/dp_8"/> + + android:id="@+id/room_name" + android:layout_width="wrap_content" + android:layout_height="@dimen/dp_16" + app:layout_constraintStart_toEndOf="@+id/room_tx" + app:layout_constraintTop_toTopOf="@+id/room_tx" + android:textColor="@color/color_FFFFFFE0" + android:layout_marginStart="@dimen/dp_8" + tools:text="房间名称" + android:textSize="@dimen/sp_12"/> + android:id="@+id/iv_type" + android:layout_width="@dimen/dp_44" + android:layout_height="@dimen/dp_24" + android:src="@mipmap/ic_jiaoy" + android:scaleType="fitCenter" + app:layout_constraintStart_toStartOf="@+id/room_name" + app:layout_constraintTop_toBottomOf="@+id/room_name"/> + android:id="@+id/room_hr" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintStart_toEndOf="@+id/room_tx" + app:layout_constraintTop_toBottomOf="@+id/iv_type" + android:textColor="@color/color_FFFFFFE0" + android:drawableStart="@mipmap/f_h" + android:layout_marginStart="@dimen/dp_8" + tools:text="18k" + /> \ No newline at end of file diff --git a/moduleroom/src/main/res/layout/room_top.xml b/moduleroom/src/main/res/layout/room_top.xml index b4ae27b..1ae20e2 100644 --- a/moduleroom/src/main/res/layout/room_top.xml +++ b/moduleroom/src/main/res/layout/room_top.xml @@ -123,7 +123,7 @@ - + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + + + - + diff --git a/modulevocal/src/main/res/layout/item_withdrawal.xml b/modulevocal/src/main/res/layout/item_withdrawal.xml index 52f1259..2d00645 100644 --- a/modulevocal/src/main/res/layout/item_withdrawal.xml +++ b/modulevocal/src/main/res/layout/item_withdrawal.xml @@ -1,64 +1,153 @@ - + + + + + + android:id="@+id/tv_amount_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/sp_14" + android:layout_marginEnd="@dimen/dp_13" + android:textColor="@color/color_ff2727" + app:layout_constraintTop_toTopOf="@id/tv_amount" + app:layout_constraintEnd_toEndOf="parent" + tools:text="142.12"/> + + + android:id="@+id/tv_fee" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/sp_14" + android:textColor="@color/color_FF666666" + android:layout_marginTop="@dimen/dp_13" + app:layout_constraintTop_toBottomOf="@id/tv_amount" + app:layout_constraintStart_toStartOf="@+id/tv_amount" + tools:text="手续费"/> + android:id="@+id/tv_fee_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/sp_14" + android:textColor="@color/color_FF666666" + android:layout_marginEnd="@dimen/dp_13" + app:layout_constraintTop_toBottomOf="@id/tv_amount_value" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="@+id/tv_fee" + tools:text="3.21"/> + + + - + android:id="@+id/tv_tax_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="@dimen/sp_14" + android:textColor="@color/color_666666" + android:layout_marginEnd="@dimen/dp_13" + app:layout_constraintTop_toBottomOf="@id/tv_fee_value" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="@+id/tv_tax" + tools:text="计算中..."/> + android:id="@+id/view" + android:layout_width="match_parent" + android:layout_height="@dimen/dp_1" + android:background="#F1F2F3" + android:layout_marginStart="@dimen/dp_13" + android:layout_marginEnd="@dimen/dp_13" + app:layout_constraintTop_toBottomOf="@+id/tv_tax" + app:layout_constraintStart_toStartOf="@+id/tv_tax" + app:layout_constraintEnd_toEndOf="@+id/tv_tax_value" + android:layout_marginTop="@dimen/dp_12"/> + + + + + + + + + + + + + \ No newline at end of file