From 94a55bafea471e68f83955f7609cdb09ede06dfe Mon Sep 17 00:00:00 2001 From: lzl <1239365383@qq.com> Date: Fri, 28 Nov 2025 19:04:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E7=BA=A6=20A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moduleutil/bean/RoomMessageEvent.java | 10 +- .../com/xscm/moduleutil/bean/UserInfo.java | 3 + .../moduleutil/bean/room/EMMessageInfo.java | 47 +-- .../com/xscm/moduleutil/http/ApiServer.java | 66 +++-- .../moduleutil/http/BaseModelTypeAdapter.java | 3 +- .../xscm/moduleutil/http/RetrofitClient.java | 45 +++ .../com/xscm/moduleutil/widget/Constants.java | 2 + .../activity/room/activity/RoomActivity.kt | 16 +- .../room/contacts/MentorShipContacts.kt | 10 + .../activity/room/fragment/RoomFragment.java | 23 +- .../room/fragment/RoomMentorShipFragment.kt | 274 ++++++++++++++++-- .../room/presenter/MentorShipPresenter.kt | 47 ++- .../modulemain/dialog/DialogMentorShip.kt | 68 +++++ .../xscm/modulemain/utils/CountdownTimer.kt | 44 +++ .../widget/RoomMentorShipWheatView.kt | 2 +- .../main/res/drawable/select_item_click.xml | 21 ++ .../res/layout/dialog_mentor_ship_layout.xml | 111 +++++++ .../main/res/layout/fragment_mentor_ship.xml | 56 ++-- .../res/layout/item_mentor_ship_layout.xml | 37 +++ 19 files changed, 782 insertions(+), 103 deletions(-) create mode 100644 MainModule/src/main/java/com/xscm/modulemain/dialog/DialogMentorShip.kt create mode 100644 MainModule/src/main/java/com/xscm/modulemain/utils/CountdownTimer.kt create mode 100644 MainModule/src/main/res/drawable/select_item_click.xml create mode 100644 MainModule/src/main/res/layout/dialog_mentor_ship_layout.xml create mode 100644 MainModule/src/main/res/layout/item_mentor_ship_layout.xml diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java index 82f1440f..8925e090 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java @@ -53,7 +53,7 @@ public class RoomMessageEvent extends BaseEvent { private String AcceptRoomId;//接收者所在的房间id private String PkId; private String room_id;//当type==1的时候。这个roomId是对方的房间id - private String user_id=""; + private String user_id = ""; private String pk_end_times;//pk结束时间 private List userCharmList; @@ -67,11 +67,11 @@ public class RoomMessageEvent extends BaseEvent { private String victory_cover;//胜利的头像 private String defeated_name;//输掉的名称 private String defeated_cover;//输掉的头像 - private String end_time;//惩罚时间 /// 在交友房中,是倒计时时间 + private String end_time;//惩罚时间 /// 在交友房中,是倒计时时间 //签约房倒计时 private int is_mute;//1:静音对方 0:不静音对方 private int is_mute_pit; private int count;//排麦模式下的人数 - private int step ; //1:等待邂逅 2:心动连线 3:牵手良缘 + private int step; //1:等待邂逅 2:心动连线 3:牵手良缘 private int friend_id; //场次id // private List list;//交友心动值发生变化 private List list;//交友房麦位发生变化 //推送的事麦上用户信息,这里使用了userinfo接收的 @@ -106,6 +106,10 @@ public class RoomMessageEvent extends BaseEvent { private String rights_icon;//Cp特效 + private String sign_id = "-1";//签约ID + private String sign_value;//签约最高价 + private String sign_day;//被签约天数 + private String current_body_value;//被签约身价 } diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java index 4f301a93..019b2afd 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java @@ -86,6 +86,9 @@ public class UserInfo extends BaseEvent implements Serializable { private CpInfo cp_info; private int market_value;//身价 + private String sign_value; + private String sign_id; + /*"cp_info": { "name": "string", "user_id1": "string", diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/room/EMMessageInfo.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/room/EMMessageInfo.java index ac6f5926..47141300 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/room/EMMessageInfo.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/room/EMMessageInfo.java @@ -72,28 +72,27 @@ public class EMMessageInfo implements MultiItemEntity { public static final int QXRoomMessageTypeRoomPKEnd = 1032; /// pk断开 public static final int QXRoomMessageTypeRoomPKDisconnect = 1033; - ///排麦模式下的人数变化 + /// 排麦模式下的人数变化 public static final int QXRoomMessageTypeRoomMaiwrens = 1034; public static final int QXRoomMessageTypeRoomDress = 1035;//动态修改用户头像信息 public static final int QXRoomMessageTypeRoomOnline = 1036;// public static final int QXRoomMessageTypeRoomOPK = 1037; public static final int QXRoomMessageTypeRoomOMh = 1038; - ///清除当前消息列表 + /// 清除当前消息列表 public static final int QXRoomMessageTypeClearMsg = 123; - ///播放音乐 + /// 播放音乐 public static final int QXRoomMessageTypeRoomMusicPlay = 124; - ///关闭对方麦克风 + /// 关闭对方麦克风 public static final int QXRoomMessageTypeMuteRemoteAudio = 125; - ///小黑屋 关麦 + /// 小黑屋 关麦 public static final int QXRoomMessageTypeMuteLocalAudio = 126; public static final int QXRoomMessageTypeCPDx = 130;//心动礼物,单向发送 public static final int QXRoomMessageTypeCPSx = 131;//心动礼物,双向发送 - /// 交友房阶段发生变化 public static final int QXRoomMessageTypeRoomFriendPartDidChanged = 1049; /// 交友房时间发生延时 @@ -108,32 +107,46 @@ public class EMMessageInfo implements MultiItemEntity { public static final int QXRoomMessageTypeHeartDidChanged = 1054; /// 小黑屋有人退出房间 public static final int QXRoomMessageTypeHeartDid = 1055; - ///盲盒抽奖进度条 + /// 盲盒抽奖进度条 public static final int QXRoomMessageTypeMangH = 1056; - ///巡乐会 + /// 巡乐会 public static final int QXRoomMessageTypeXlh = 1057; - ///在离线 + /// 在离线 public static final int QXRoomMessageTypezailx = 1058; - ///清除个人魅力值 + /// 清除个人魅力值 public static final int QXRoomMessageTypeQingGRMl = 1059; - ///有红包列表 + /// 有红包列表 public static final int QXRoomMessageTypeQXRoomMessageRed = 1060; - ///移除红包 + /// 移除红包 public static final int QXRoomMessageTypeQXRoomMessageRedRemove = 1061; - ///点歌房当前歌曲发生变化 - public static final int QXRoomMessageTypeSingerRoomCurrentSongDidChanged=1070; + /// 点歌房当前歌曲发生变化 + public static final int QXRoomMessageTypeSingerRoomCurrentSongDidChanged = 1070; - ///点歌房下一首歌曲发生变化 - public static final int QXRoomMessageTypeSingerRoomNextSongDidChanged=1071; + /// 点歌房下一首歌曲发生变化 + public static final int QXRoomMessageTypeSingerRoomNextSongDidChanged = 1071; //已点歌曲数量 public static final int QXRoomMessageTypeSongerNum = 1072; - ///房间内换麦 + /// 房间内换麦 public static final int QXRoomMessageTypehm = 1039; public static final int QXRoomMessageTypeCPText = 1080;//CP特效,进入房间的特效, + /// 签约开始 + public static final int QXRoomMessageTypeSignStartText = 1090; + /// 签约出价 FromUserInfo :出价最高用户信息,sign_value:出的价,sign_id:场次 + public static final int QXRoomMessageTypeSignMaxUserText = 1091; + + /** + * 签约结束 + * FromUserInfo:出价用户信息 + * ToUserInfo:被签用户信息 + * sign_value:出的最高价 + */ + public static final int QXRoomMessageTypeSignEndText = 1092; + /// 延时到这个时间点 + public static final int QXRoomMessageTypeSignDelayText = 1093; private RoomMessageEvent emMessage; diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java index db43c64b..947b44f3 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -34,7 +34,8 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.ROOM_HOUR_BEAN) - Call> getRoomHourRanking(@Field("page") String page,@Field("page_limit")String page_limit); + 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); @@ -43,7 +44,7 @@ public interface ApiServer { Call>> upEmotion(); @GET(Constants.GET_EMOTION_DEATILS) - Call>> getEmotionDeatils(@Query("type_id") String type_id,@Query("pid") String pid); + Call>> getEmotionDeatils(@Query("type_id") String type_id, @Query("pid") String pid); @FormUrlEncoded //手机绑定 @POST(Constants.BIND_MOBILE) @@ -51,7 +52,7 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.USER_ROOM_BACK) - Call userRoomBack(@Field("room_id")String room_id,@Field("type")String type); + Call userRoomBack(@Field("room_id") String room_id, @Field("type") String type); @FormUrlEncoded @POST(Constants.USER_LOGIN) @@ -128,6 +129,7 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_INVITE) Call> postInvite(@Field("apply_id") String apply_id, @Field("type") String type); + @GET(Constants.GET_TEMP_KEY) Call> getTempKey(); @@ -137,7 +139,7 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_GET_SONG) - Call> getSong(@Field("user_id") String user_id,@Field("room_id") String room_id,@Field("page") String page, @Field("page_limit") String page_limit); + Call> getSong(@Field("user_id") String user_id, @Field("room_id") String room_id, @Field("page") String page, @Field("page_limit") String page_limit); @FormUrlEncoded @POST(Constants.POST_SINGER_SONG_CUT) @@ -153,23 +155,23 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_SINGER_SONG) - Call> singerSong(@Field("song_id") String song_id,@Field("room_id") String room_id); + Call> singerSong(@Field("song_id") String song_id, @Field("room_id") String room_id); @FormUrlEncoded @POST(Constants.POST_SINGER_SONG_LIST) - Call> singerSongList(@Field("room_id") String room_id,@Field("type") String type,@Field("page") String page, @Field("page_limit") String page_limit); + Call> singerSongList(@Field("room_id") String room_id, @Field("type") String type, @Field("page") String page, @Field("page_limit") String page_limit); @FormUrlEncoded @POST(Constants.POST_SINGER_DELETE_SONG) Call> deleteSong(@Field("id") String song_id); - @FormUrlEncoded - @POST(Constants.POST_SINGER_ADD_SONG) - Call> singerAddSong(@Field("song_name") String song_name,@Field("gift_id") String gift_id,@Field("gift_num") String gift_num); + @FormUrlEncoded + @POST(Constants.POST_SINGER_ADD_SONG) + Call> singerAddSong(@Field("song_name") String song_name, @Field("gift_id") String gift_id, @Field("gift_num") String gift_num); - @FormUrlEncoded - @POST(Constants.POST_SINGER_UPDATE_SONG) - Call> singerUpdateSong(@Field("id") String is,@Field("song_name") String song_name,@Field("gift_id") String gift_id,@Field("gift_num") String gift_num); + @FormUrlEncoded + @POST(Constants.POST_SINGER_UPDATE_SONG) + Call> singerUpdateSong(@Field("id") String is, @Field("song_name") String song_name, @Field("gift_id") String gift_id, @Field("gift_num") String gift_num); @FormUrlEncoded @POST(Constants.POST_ROOM_RANK) @@ -333,9 +335,10 @@ public interface ApiServer { //获取礼物列表 @GET(Constants.GIFT_LIST) - Call>> getGiftList(@Query("label") int label,@Query("room_id")String room_id); + Call>> getGiftList(@Query("label") int label, @Query("room_id") String room_id); - @GET(Constants.TOPIC_LIST)//获取话题 + @GET(Constants.TOPIC_LIST) +//获取话题 Call>> topicList(@Query("page") String page, @Query("page_limit") String page_limit); @FormUrlEncoded @@ -530,6 +533,7 @@ public interface ApiServer { @GET(Constants.GET_FIRST_CHARGE_GIFT) Call> firstChargeGift(); + @GET(Constants.GET_NEW_CHARGE_GIFT) Call> getNewChargeGift(); @@ -545,8 +549,8 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.REDPACKET_CREATE) Call redPacketCreate(@Field("type") int type, @Field("password") String password, @Field("coin_type") int coin_type, @Field("total_amount") String total_amount, - @Field("total_count")String total_count, @Field("conditions") String conditions, @Field("countdown") String countdown, @Field("room_id") String room_id, - @Field("remark") String remark); + @Field("total_count") String total_count, @Field("conditions") String conditions, @Field("countdown") String countdown, @Field("room_id") String room_id, + @Field("remark") String remark); @GET(Constants.ROOM_REDPACKET) Call>> roomRedPackets(@Query("room_id") String roomId); @@ -800,17 +804,17 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_DRAW_GIFT_LIST) - Call> drawGiftList(@Field("gift_bag_id") String gift_bag_id, @Field("gift_user_ids") String gift_user_ids,@Field("room_id")String room_id,@Field("num")String num,@Field("heart_id") String heart_id,@Field("auction_id") String auction_id); + Call> drawGiftList(@Field("gift_bag_id") String gift_bag_id, @Field("gift_user_ids") String gift_user_ids, @Field("room_id") String room_id, @Field("num") String num, @Field("heart_id") String heart_id, @Field("auction_id") String auction_id); @GET(Constants.GET_MY_RECORD) - Call>> getMyRecord(@Query("gift_bag_id")String gift_bag_id,@Query("page")String page,@Query("page_size")String page_size); + Call>> getMyRecord(@Query("gift_bag_id") String gift_bag_id, @Query("page") String page, @Query("page_size") String page_size); @GET(Constants.GET_ALL_RECORD) - Call>> getAllRecord(@Query("gift_bag_id")String gift_bag_id,@Query("page")String page,@Query("page_size")String page_size); + Call>> getAllRecord(@Query("gift_bag_id") String gift_bag_id, @Query("page") String page, @Query("page_size") String page_size); @FormUrlEncoded @POST(Constants.GIFT_SEND) - Call> giftSend(@Field("send_id")String send_id); + Call> giftSend(@Field("send_id") String send_id); @GET(Constants.GET_NOBILITY_DETAIL) Call> getNobilityDetail(); @@ -822,10 +826,10 @@ public interface ApiServer { Call> getNobilityPrice(@Query("id") String id); @POST(Constants.POST_SEND_LOG) - Call> postSendAppLog(@Query("log_name") String logName,@Query("log_url") String logUrl); + Call> postSendAppLog(@Query("log_name") String logName, @Query("log_url") String logUrl); @GET(Constants.GET_BOX_GIFT_LIST_XLH) - Call> getBoxGiftListXLH( @Query("room_id") String room_id); + Call> getBoxGiftListXLH(@Query("room_id") String room_id); @FormUrlEncoded @POST(Constants.POST_DRAW_GIFT_LIST_XLH) @@ -834,6 +838,7 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_XLH_ALL_RECORD) Call>> xlhAllRecord(@Field("room_id") String room_id, @Field("page") String page, @Field("page_size") String page_size); + @FormUrlEncoded @POST(Constants.Get_XH_RANking) Call>> xlXH_RANking(@Field("room_id") String room_id, @Field("page") String page, @Field("page_size") String page_size); @@ -843,11 +848,11 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_GIFT_ALL_CLEAR) - Call> getGiftPack(@Field("room_id") String roomId,@Field("to_uid") String user_id,@Field("heart_id") String heart_id,@Field("auction_id") String auction_id); + Call> getGiftPack(@Field("room_id") String roomId, @Field("to_uid") String user_id, @Field("heart_id") String heart_id, @Field("auction_id") String auction_id); @FormUrlEncoded @POST(Constants.POST_ROOM_USER_CHARM_LIST) - Call>> roomUserCharmList(@Field("room_id") String roomId,@Field("user_id") String user_id); + Call>> roomUserCharmList(@Field("room_id") String roomId, @Field("user_id") String user_id); @GET(Constants.GET_GIFT_PACK_LIST_COUNT) Call> getGiftPackListCount(); @@ -868,11 +873,11 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_FAMILY_EARNINGS) - Call>> familyEarnings( @Field("user_id") String user_id,@Field("page") int page,@Field("start_time") String start_time,@Field("end_time") String end_time); + Call>> familyEarnings(@Field("user_id") String user_id, @Field("page") int page, @Field("start_time") String start_time, @Field("end_time") String end_time); @FormUrlEncoded @POST(Constants.POST_SIGN_START) - Call> signStart(@Field("room_id") String room_id,@Field("user_id") String user_id); + Call> signStart(@Field("room_id") String room_id, @Field("user_id") String user_id); @FormUrlEncoded @POST(Constants.POST_SIGN_END) @@ -880,7 +885,14 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.POST_SIGN_DELAY) - Call> signDelay(@Field("sign_id") String sign_id,@Field("room_id") String room_id); + Call> signDelay(@Field("sign_id") String sign_id, @Field("room_id") String room_id); + + @FormUrlEncoded + @POST(Constants.POST_SIGN_COIN_LIST) + Call>> signCoinList(@Field("sign_id") String sign_id); + @FormUrlEncoded + @POST(Constants.POST_SIGN_COIN) + Call> signCoin(@Field("sign_id") String sign_id,@Field("sign_value") String sign_value); @GET(Constants.GET_SKILL_LIST) Call>> skillList(); diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/BaseModelTypeAdapter.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/BaseModelTypeAdapter.java index b8dcde93..45fc6ccc 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/BaseModelTypeAdapter.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/BaseModelTypeAdapter.java @@ -63,8 +63,7 @@ public class BaseModelTypeAdapter extends TypeAdapter> { model.setData(null); } else { // 如果 data 是字符串类型但不是 "null",可根据业务决定是否抛异常或处理 - reader.skipValue(); - model.setData(null); + model.setData((T)value); } } else { try { diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index b3a5f1f1..1762614a 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -4558,6 +4558,50 @@ public class RetrofitClient { }); } + public void signCoinList(String sign_id, BaseObserver> observer) { + sApiServer.signCoinList(sign_id).enqueue(new Callback>>() { + + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.code() == 200) { + BaseModel> baseModel = response.body(); + if (baseModel.getCode() == 1) + observer.onNext(baseModel.getData() != null ? baseModel.getData() : new ArrayList()); + else if (baseModel.getCode() == 301) { + try { + ToastUtils.showShort(baseModel.getMsg()); + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + } + + } else { + ToastUtils.showLong(baseModel.getMsg()); + } + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + + } + }); + } + + public void signCoin(String sign_id,String sign_value, BaseObserver observer) { + sApiServer.signCoin(sign_id,sign_value).enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response, observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + } + public void getCpRoom(String userId, BaseObserver observer) { sApiServer.getCpRoom(userId).enqueue(new Callback>() { @@ -4693,6 +4737,7 @@ public class RetrofitClient { } }); } + public void signStart(String room_id, String user_id, BaseObserver observer) { sApiServer.signStart(room_id, user_id).enqueue(new Callback>() { diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java index a81d2051..096e11c8 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -443,6 +443,8 @@ public class Constants { public static final String POST_SIGN_START = "/api/Sign/start_sign";//签约开始 public static final String POST_SIGN_END = "/api/Sign/end_sign";//签约结束 public static final String POST_SIGN_DELAY = "/api/Sign/sign_delay";//签约延时 + public static final String POST_SIGN_COIN_LIST = "/api/Sign/sign_coin_list";//签约出价价格列表 + public static final String POST_SIGN_COIN = "/api/Sign/sign_coin";//签约出价 diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/activity/RoomActivity.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/room/activity/RoomActivity.kt index 72f9088b..b9708a26 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/activity/RoomActivity.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/activity/RoomActivity.kt @@ -1507,6 +1507,14 @@ class RoomActivity : BaseMvpActivity(), messageEvent.text.rights_icon ) } + } else if (msgType == EMMessageInfo.QXRoomMessageTypeSignStartText) { + roomFragment?.handleRoomMessage(messageEvent) + } else if (msgType == EMMessageInfo.QXRoomMessageTypeSignMaxUserText) { + roomFragment?.handleRoomMessage(messageEvent) + } else if (msgType == EMMessageInfo.QXRoomMessageTypeSignEndText) { + roomFragment?.handleRoomMessage(messageEvent) + } else if (msgType == EMMessageInfo.QXRoomMessageTypeSignDelayText) { + roomFragment?.handleRoomMessage(messageEvent) } } @@ -1797,6 +1805,7 @@ class RoomActivity : BaseMvpActivity(), roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment?.handleRoomMessage(messageEvent) } + RoomType.SIGN_CONTRACT -> { mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] = getPitBean(messageEvent, 1) @@ -1805,6 +1814,7 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.rlMisc.visibility = View.GONE roomFragment?.handleRoomMessage(messageEvent) } + else -> { roomFragment!!.updateSeatViewExchangedWithPitArray(mRoomInfoResp) } @@ -1887,6 +1897,7 @@ class RoomActivity : BaseMvpActivity(), roomFragment!!.upRoomInfoData(mRoomInfoResp) roomFragment!!.handleRoomMessage(messageEvent) } + RoomType.SIGN_CONTRACT -> { mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] = RoomPitBean(pitNumber) @@ -2500,7 +2511,7 @@ class RoomActivity : BaseMvpActivity(), val id = view.id // 通过 ID 获取资源名称 - var viewName = try { + var viewName = try { view.context.resources.getResourceEntryName(id) } catch (e: java.lang.Exception) { "未知View ID: $id" @@ -3129,7 +3140,7 @@ class RoomActivity : BaseMvpActivity(), } - fun dialogMessage(event: RoomInputEvent){ + fun dialogMessage(event: RoomInputEvent) { if (publicScreenFragment != null) { publicScreenFragment!!.fasong(event) } @@ -3660,7 +3671,6 @@ class RoomActivity : BaseMvpActivity(), } - // 添加检查房间连接状态的方法 private fun resumeRoomState() { // 恢复房间相关状态 diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/contacts/MentorShipContacts.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/room/contacts/MentorShipContacts.kt index 4abec81b..a7d68749 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/contacts/MentorShipContacts.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/contacts/MentorShipContacts.kt @@ -3,11 +3,15 @@ package com.xscm.modulemain.activity.room.contacts import android.app.Activity import com.xscm.moduleutil.activity.IPresenter import com.xscm.moduleutil.activity.IView +import com.xscm.moduleutil.bean.WalletBean class MentorShipContacts { interface View : IView{ + fun signCoinList(list:List) + + fun wallet(list:List,walletBean: WalletBean?) } interface Ipre : IPresenter{ @@ -19,8 +23,14 @@ class MentorShipContacts { fun signDelay(signId:String,roomId:String) + fun signCoinList(signId:String) + + fun signCoin(signId:String,sign_value:String) + fun setMutePit(roomId:String,pitNumber:String,isMute:String) fun setLockPit(roomId:String,pitNumber:String,isLock:String) + + fun wallet(list:List) } } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java index 95e666a9..96d3af55 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java @@ -30,6 +30,7 @@ import com.xscm.moduleutil.bean.RedPacketInfo; import com.xscm.moduleutil.bean.RoomCharmRankBean; import com.xscm.moduleutil.bean.RoomMessageEvent; import com.xscm.moduleutil.bean.UserOnlineStatusBean; +import com.xscm.moduleutil.bean.room.EMMessageInfo; import com.xscm.moduleutil.bean.room.FriendInfo; import com.xscm.moduleutil.bean.room.FriendUserBean; import com.xscm.moduleutil.bean.room.RoomAuction; @@ -305,7 +306,7 @@ public class RoomFragment extends BaseMvpFragment indexList[idx].toInt() - 1) { view.setRoomWheatNumber(indexList[idx]) val bean = mRoomInfo?.room_info?.pit_list!![indexList[idx].toInt() - 1] if (idx == 0) { view.setHostTv(mBinding.tvHostName) - }else if (idx == 1){ - signPitBean = bean + } else if (idx == 1) { + mSignPitBean = bean + if (bean.user_id != "0" && mUserInfo?.user_id != null && viewList[0].pitBean?.user_id.equals(mUserInfo?.user_id.toString())) { + mBinding.tvTimeLeft.visibility = View.VISIBLE + } } view.isMentorShip(true) view.setData(bean) @@ -116,7 +150,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : // 处理抱麦逻辑 RoomOnlineDialogFragment.show( - roomId, + mRoomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo, @@ -133,56 +167,94 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : mBinding.ivApplyForMai.setOnClickListener(this) mBinding.tvTimeLeft.setOnClickListener(this) mBinding.tvTimeRight.setOnClickListener(this) + + if (mRoomInfo?.sign_info?.sign_id != "-1") { + if (mRoomInfo?.sign_info?.sign_status == 0) { + mBinding.tvTimeLeft.text = startOrDelay[0] + } else { + mBinding.tvTimeLeft.text = startOrDelay[1] + startTimer(mRoomInfo?.sign_info?.end_time!!) + } + mBinding.tvSignDay.visibility = View.VISIBLE + + mSignId = mRoomInfo?.sign_info?.sign_id + mBinding.tvLeftPrice.text = mRoomInfo?.sign_info?.current_body_value.toString() + + + mBinding.tvSignDay.text = "签约${mRoomInfo?.sign_info?.sign_day}天" + + if (mUserInfo?.user_id?.toString().equals(mSignPitBean?.user_id)) { + setIvForMai(1) + } else if (!mSignPitBean?.user_id.equals("0")) { + setIvForMai(2) + } else { + setIvForMai(0) + } + } else { + mBinding.tvTimeLeft.text = startOrDelay[0] + mBinding.tvTime.text = "倒计时 00:00" + setIvForMai(0) + } } override fun onClick(v: View?) { when (v?.id) { R.id.iv_apply_for_mai -> { - MvpPre!!.applyPit(mRoomInfo?.room_info?.room_id!!, "") + when (mBinding.ivApplyForMai.tag) { + ivForMai[0] -> { + MvpPre!!.applyPit(mRoomInfo?.room_info?.room_id!!, "") + } + + ivForMai[1] -> { + RoomTalentDialog(ActivityUtils.getTopActivity(), mRoomId).show() + } + + ivForMai[2] -> { + MvpPre?.signCoinList(mSignId!!) + } + } } R.id.tv_time_left -> { - if (mBinding.tvTimeLeft.text.toString() == "开始") { - MvpPre.signStart(roomId,signPitBean?.user_id!!) + if (mBinding.tvTimeLeft.text.toString() == startOrDelay[0]) { + MvpPre.signStart(mRoomId, mSignPitBean?.user_id!!) } else { - MvpPre.signDelay(mRoomInfo?.sign_info?.sign_id!!,roomId) + MvpPre.signDelay(mSignId!!, mRoomId) } } R.id.tv_time_right -> { - MvpPre.signEnd(mRoomInfo?.sign_info?.sign_id!!) + MvpPre.signEnd(mSignId!!) } } } - private fun showHostOrAboveBottomView(isSignUser:Boolean) { + private fun showHostOrAboveBottomView(isShow: Boolean) { if (getHostUser() < 4) { - mBinding.tvTimeLeft.visibility = View.VISIBLE - mBinding.tvTimeLeft.text = "开始" - mBinding.tvTime.text = "倒计时 00:00" + mBinding.tvTimeRight.visibility = if (isShow) View.VISIBLE else View.INVISIBLE + mBinding.tvTime.visibility = if (isShow) View.VISIBLE else View.INVISIBLE } else { - mBinding.tvHostName.visibility = View.GONE + mBinding.tvTime.visibility = if (isShow) View.VISIBLE else View.INVISIBLE } } fun roomInfoUpdate(mRoomInfoResp: RoomInfoResp) { mRoomInfo = mRoomInfoResp + mUserInfo = mRoomInfo?.user_info } fun event1003(messageEvent: RoomMessageEvent) { - val fromUserInfo = messageEvent.text.fromUserInfo ?: return - val pitNumber = messageEvent.text.pit_number - val userId = fromUserInfo.user_id - if (indexList.contains(pitNumber)) { val viewPos = indexList.indexOf(pitNumber) val pitBean = mRoomInfo?.room_info?.pit_list!![pitNumber.toInt() - 1] viewList[viewPos].setData(pitBean) if (pitNumber == "1") { - showHostOrAboveBottomView(true) - signPitBean = pitBean + mSignPitBean = pitBean + } + if (pitNumber == "9" && pitBean.user_id.equals(mUserInfo?.user_id.toString())) { + mBinding.tvTimeLeft.visibility = View.VISIBLE } } @@ -200,12 +272,154 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : viewList[viewPos].setData(pitBean) if (pitNumber == "1") { - showHostOrAboveBottomView(false) - signPitBean = pitBean + mSignPitBean = pitBean + } + + if (pitNumber == "9" && pitBean.user_id.equals(mUserInfo?.user_id.toString())) { + mBinding.tvTimeLeft.visibility = View.GONE } } } + /** + * 开始 + * sign_id :场次id(这个出价的时候要传回来) + */ + fun event1090(messageEvent: RoomMessageEvent?) { + mSignId = messageEvent?.text?.sign_id + val endTime = messageEvent?.text?.end_time + val signDay = messageEvent?.text?.sign_day + val currBodyValue = messageEvent?.text?.current_body_value + if (!mSignId.equals("-1")) { + startTimer(endTime?.toLong()!!) + mBinding.tvTimeLeft.text = startOrDelay[1] + mBinding.tvLeftPrice.text = currBodyValue + mBinding.tvSignDay.visibility = View.VISIBLE + mBinding.tvSignDay.text = "签约${signDay}天" + + if (viewList[indexList.indexOf("1")].pitBean.user_id.equals(mUserInfo?.user_id.toString())) { + setIvForMai(1) + } else { + setIvForMai(2) + } + } + + } + + /** + * IM 推送 1091 + * FromUserInfo :出价最高用户信息,sign_value:出的价,sign_id:场次 + */ + fun event1091(messageEvent: RoomMessageEvent?) { + val fromUserInfo = messageEvent?.text?.fromUserInfo + val signId = messageEvent?.text?.sign_id + if (fromUserInfo != null && mSignId == signId) { + val pitBean = RoomPitBean() + pitBean.pit_number = indexList[2] + pitBean.user_id = fromUserInfo.user_id.toString() + pitBean.avatar = fromUserInfo.avatar + pitBean.nickname = fromUserInfo.nickname + pitBean.sex = fromUserInfo.sex.toString() + pitBean.charm = fromUserInfo.charm + viewList[indexList.indexOf("2")].setData(pitBean) + + if (dialogMentorShip != null && dialogMentorShip?.isShowing!!) { + MvpPre!!.signCoinList(mSignId!!) + } + } + } + + /** + * IM推送 1092 结束 + * FromUserInfo:出价用户信息 + * ToUserInfo:被签用户信息 + * sign_value:出的最高价 + */ + fun event1092(messageEvent: RoomMessageEvent?) { + stopTimer() + + val fromUserInfo = messageEvent?.text?.fromUserInfo + val toUserInfo = messageEvent?.text?.toUserInfo + val signValue = messageEvent?.text?.sign_value + if (fromUserInfo != null && toUserInfo != null && signValue != null) { + + } + } + + /** + * IM 1093的推送 + * end_time:延时到这个时间点 + */ + fun event1093(messageEvent: RoomMessageEvent?) { + val endTime = messageEvent?.text?.end_time + restartWithDelay(endTime?.toLong()!!) + } + + + override fun signCoinList(list: List) { + MvpPre!!.wallet(list) + } + + override fun wallet(list: List,walletBean: WalletBean?) { + if (dialogMentorShip == null) { + dialogMentorShip = DialogMentorShip(ActivityUtils.getTopActivity()) + } + dialogMentorShip?.show(list,mSignPitBean, + object : DialogMentorShip.OnItemClickListener { + override fun onItemClick(coin: String) { + MvpPre!!.signCoin(mSignId!!, coin) + } + }) + } + + + private fun setIvForMai(idx: Int) { + mBinding.ivApplyForMai.setImageResource(ivForMai[idx]) + mBinding.ivApplyForMai.tag = ivForMai[idx] + } + + + // 在需要开始计时的地方调用 + private fun startTimer(milliseconds: Long) { + showHostOrAboveBottomView(true) + // 启动计时器 + timer.startCountdown(milliseconds, scope) + // 观察时间变化 + scope.launch { + timer.timeLeft.collect { time -> + val formattedTime = timer.formatTime(time) + // 更新UI显示 + updateTimerDisplay(formattedTime) + } + } + } + + private fun stopTimer() { + timer.stop() + setIvForMai(0) + showHostOrAboveBottomView(false) + + mBinding.tvLeftPrice.text = "0" + mBinding.tvSignDay.visibility = View.GONE + mBinding.tvTimeLeft.text = startOrDelay[0] + mBinding.tvTime.text = "倒计时 00:00" + } + + // 更新UI显示 + private fun updateTimerDisplay(time: String) { + // 在这里更新你的UI,比如: + mBinding.tvTime.text = "倒计时 ${time}" + } + + // 延迟后重新开始计时 + private fun restartWithDelay(newMilliseconds: Long, delayMillis: Long = 1000) { + scope.launch { + delay(delayMillis) + startTimer(newMilliseconds) + } + } + + fun event1035(messageEvent: RoomMessageEvent) { } @@ -271,7 +485,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : } switchCloseMic.setOnCheckedChangeListener { compoundButton, b -> MvpPre.setMutePit( - roomId, + mRoomId, mPitBean?.pit_number!!, if (b) "2" else "4" ) @@ -280,7 +494,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : switchLockMic.setOnCheckedChangeListener { compoundButton, b -> MvpPre.setLockPit( - roomId, + mRoomId, mPitBean?.pit_number!!, if (b) "1" else "0" ) @@ -290,7 +504,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : tvHugMic.setOnClickListener { v: View? -> // 处理抱麦逻辑 RoomOnlineDialogFragment.show( - roomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo, + mRoomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo, childFragmentManager ) popupWindow!!.dismiss() @@ -322,4 +536,12 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) : viewList.clear() } + + // 在Fragment销毁时记得清理资源 + override fun onDestroy() { + super.onDestroy() + scope.cancel() + } + + } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/room/presenter/MentorShipPresenter.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/room/presenter/MentorShipPresenter.kt index d126abfc..ec45c3a5 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/room/presenter/MentorShipPresenter.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/room/presenter/MentorShipPresenter.kt @@ -1,11 +1,12 @@ package com.xscm.modulemain.activity.room.presenter import android.content.Context -import com.xscm.modulemain.activity.room.contacts.JukeboxContacts import com.xscm.modulemain.activity.room.contacts.MentorShipContacts +import com.xscm.moduleutil.bean.WalletBean import com.xscm.moduleutil.http.BaseObserver import com.xscm.moduleutil.http.RetrofitClient import com.xscm.moduleutil.presenter.BasePresenter +import com.xscm.moduleutil.presenter.RewardGiftContacts import io.reactivex.disposables.Disposable import java.lang.ref.WeakReference @@ -24,6 +25,23 @@ class MentorShipPresenter(context: Context, val view: MentorShipContacts.View) : }) } + + override fun wallet(list:List) { + RetrofitClient.getInstance().wallet(object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } + + override fun onNext(walletBean: WalletBean) { + if (MvpRef == null) { + MvpRef = WeakReference(view) + } + MvpRef.get()?.wallet(list,walletBean) + } + }) + } + + override fun signStart(roomId: String, userId: String) { RetrofitClient.getInstance().signStart(roomId, userId, object : BaseObserver() { override fun onSubscribe(d: Disposable) { @@ -60,6 +78,33 @@ class MentorShipPresenter(context: Context, val view: MentorShipContacts.View) : }) } + override fun signCoinList(signId: String) { + RetrofitClient.getInstance().signCoinList(signId, object : BaseObserver>() { + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } + + override fun onNext(list: List) { + if (MvpRef == null){ + MvpRef = WeakReference(view) + } + MvpRef.get()?.signCoinList(list) + } + }) + } + + override fun signCoin(signId: String, sign_value: String) { + RetrofitClient.getInstance().signCoin(signId, sign_value, object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } + + override fun onNext(s: String) { + + } + }) + } + override fun setMutePit(roomId: String, pitNumber: String, isMute: String) { RetrofitClient.getInstance() diff --git a/MainModule/src/main/java/com/xscm/modulemain/dialog/DialogMentorShip.kt b/MainModule/src/main/java/com/xscm/modulemain/dialog/DialogMentorShip.kt new file mode 100644 index 00000000..2e8eba7e --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/dialog/DialogMentorShip.kt @@ -0,0 +1,68 @@ +package com.xscm.modulemain.dialog + +import android.content.Context +import android.view.Gravity +import android.view.ViewGroup +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.xscm.modulemain.R +import com.xscm.modulemain.databinding.DialogMentorShipLayoutBinding +import com.xscm.moduleutil.bean.room.RoomPitBean +import com.xscm.moduleutil.utils.ImageUtils +import com.xscm.moduleutil.widget.dialog.BaseDialog + +class DialogMentorShip(context: Context) : BaseDialog(context) { + + init { + // 设置对话框从底部弹出 + window?.setGravity(Gravity.BOTTOM) + // 设置对话框的宽度为屏幕宽度 + window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + // 添加动画效果 + window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) + } + + + + override fun getLayoutId(): Int { + return R.layout.dialog_mentor_ship_layout + } + + private var adapter: Adapter? = null + private var onItemClickListener: OnItemClickListener? = null + override fun initView() { + adapter = Adapter(R.layout.item_mentor_ship_layout, arrayListOf()) + mBinding.recycleView.adapter = adapter + } + + override fun initData() { + adapter?.setOnItemClickListener { adapter, view, position -> + onItemClickListener?.onItemClick(adapter.data[position]!!.toString()) + } + mBinding.tvRecharge.setOnClickListener { + + } + } + + fun show(list: List, mSignPitBean: RoomPitBean?, onItemClickListener: OnItemClickListener?) { + super.show() + mBinding.tvName.text = mSignPitBean?.nickname + ImageUtils.loadHeadCC(mSignPitBean?.avatar, mBinding.ivHead) + this.onItemClickListener = onItemClickListener + adapter?.setNewData(list) + } + + + class Adapter(idx: Int, data: MutableList) : + BaseQuickAdapter(idx, data) { + override fun convert(helper: BaseViewHolder, item: String?) { + helper.setText(R.id.tv_glod, item) + } + } + + + interface OnItemClickListener { + fun onItemClick(coin: String) + } + +} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/utils/CountdownTimer.kt b/MainModule/src/main/java/com/xscm/modulemain/utils/CountdownTimer.kt new file mode 100644 index 00000000..7f5485e5 --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/utils/CountdownTimer.kt @@ -0,0 +1,44 @@ +package com.xscm.modulemain.utils + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class CountdownTimer { + private var job: Job? = null + private val _timeLeft = MutableStateFlow(0L) + val timeLeft: StateFlow = _timeLeft + + fun startCountdown(endTimestamp: Long, scope: CoroutineScope) { + job?.cancel() + job = scope.launch { + while (true) { + val currentTime = System.currentTimeMillis() / 1000 + val remainingTime = (endTimestamp - currentTime) * 1000 // 转换为毫秒 + + if (remainingTime <= 0) { + _timeLeft.value = 0 + break + } + + _timeLeft.value = remainingTime + delay(1000) + } + } + } + + fun stop() { + job?.cancel() + } + + fun formatTime(milliseconds: Long): String { + val seconds = (milliseconds / 1000).toInt() + val minutes = seconds / 60 + val remainingSeconds = seconds % 60 + return String.format("%02d:%02d", minutes, remainingSeconds) + } +} + diff --git a/MainModule/src/main/java/com/xscm/modulemain/widget/RoomMentorShipWheatView.kt b/MainModule/src/main/java/com/xscm/modulemain/widget/RoomMentorShipWheatView.kt index 77330ff5..cba34b28 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/widget/RoomMentorShipWheatView.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/widget/RoomMentorShipWheatView.kt @@ -74,7 +74,7 @@ class RoomMentorShipWheatView : BaseWheatView { hostTv?.text = bean.nickname } else { mTvName.visibility = VISIBLE - mCharmView.visibility = INVISIBLE + mCharmView.visibility = GONE hostTv?.visibility = GONE } } diff --git a/MainModule/src/main/res/drawable/select_item_click.xml b/MainModule/src/main/res/drawable/select_item_click.xml new file mode 100644 index 00000000..555db10a --- /dev/null +++ b/MainModule/src/main/res/drawable/select_item_click.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MainModule/src/main/res/layout/dialog_mentor_ship_layout.xml b/MainModule/src/main/res/layout/dialog_mentor_ship_layout.xml new file mode 100644 index 00000000..398c7fb7 --- /dev/null +++ b/MainModule/src/main/res/layout/dialog_mentor_ship_layout.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MainModule/src/main/res/layout/fragment_mentor_ship.xml b/MainModule/src/main/res/layout/fragment_mentor_ship.xml index 3d42e808..90eb6589 100644 --- a/MainModule/src/main/res/layout/fragment_mentor_ship.xml +++ b/MainModule/src/main/res/layout/fragment_mentor_ship.xml @@ -15,7 +15,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_begin="@dimen/dp_10" /> + app:layout_constraintGuide_begin="@dimen/dp_8" /> + app:layout_constraintTop_toTopOf="@id/tv_time" /> @@ -98,6 +101,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_40" + android:layout_marginTop="@dimen/dp_3" android:src="@mipmap/icon_host_top_tips_bg" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -107,9 +111,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_48" + android:layout_marginTop="@dimen/dp_20" android:textColor="#FFEFEAFF" android:textSize="@dimen/sp_10" - android:layout_marginTop="@dimen/dp_20" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -172,7 +176,7 @@ android:id="@+id/tv_left_price" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="9998" + android:text="0" android:textColor="@color/white" android:textSize="@dimen/sp_10" android:textStyle="normal" @@ -191,6 +195,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/gl_left_price" /> + + + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + + - + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_begin="48dp" /> + + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.5" /> + + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.8" /> + + + + + + + \ No newline at end of file