1:修改拍卖房转盘问题

2:添加转盘参数竞拍问题
This commit is contained in:
2025-10-12 16:31:54 +08:00
parent 329d698550
commit 773db1da25
110 changed files with 4299 additions and 17681 deletions

View File

@@ -216,6 +216,9 @@ dependencies {
api 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
api 'io.github.mayzs:paho.mqtt.android:1.2.1'
// ShapeViewhttps://github.com/getActivity/ShapeView
// api 'com.github.getActivity:ShapeView:10.0'
// room数据库
// def room_version = "2.5.0"

View File

@@ -36,7 +36,6 @@ import java.util.List;
public class GiftTwoDetailsFragment extends BaseMvpFragment<RewardGiftPresenter, RoomVpGiftBinding> implements RewardGiftContacts.View {
private String id;
private GiftTwoAdapter mAdapter;
private GiftRoomAdapter roomAdapter;
private GiftPackAdapter packAdapter;
private String tag;

View File

@@ -0,0 +1,14 @@
package com.xscm.moduleutil.bean;
import lombok.Data;
/**
* @Description: 首页活动弹窗权限
* @Author: xscm
* @Date: 2021/9/27 14:05
*/
@Data
public class ActivitiesPermission {
private int first_charge_permission;//首充权限 1:有 0:无
private int day_drop_permission;//天降好礼权限 1:有 0:无
private int n_people_permission;//新人好礼权限 1:有 0:无
}

View File

@@ -20,6 +20,7 @@ public class FirstChargeGiftBean {
private String title2;
private String money;
private List<RoonGiftModel> gift_list;
private int status;
// @Data
// public static class GiftList {

View File

@@ -2,12 +2,37 @@ package com.xscm.moduleutil.bean;
import lombok.Data;
import java.util.List;
@Data
public class HeavenGiftBean {
private String title;
private String picture;
private int type;
private String quantity;
private String gold;
private String days;
private String name; //活动名称
private String bag_name;//礼包名称
private String effective_time;//倒计时时间 秒
private String rule;//规则地址
private Counter counter;//礼包说明
private List<GiftList> gift_list;
private int type;
private String icon;
@Data
public static class Counter{
private String counter;
private String money;
private String diamond;
}
@Data
public static class GiftList{
private String name;
private String num;
private String gold;
}
}

View File

@@ -0,0 +1,17 @@
package com.xscm.moduleutil.bean;
import com.stx.xhb.xbanner.entity.SimpleBannerInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class PermissionPicBean extends SimpleBannerInfo {
private int picId;
private int type;//类型 1首充、2天降 3新人
@Override
public Object getXBannerUrl() {
return picId;
}
}

View File

@@ -0,0 +1,27 @@
package com.xscm.moduleutil.bean.room;
import lombok.Data;
import java.util.List;
/**
* 红包的结果集
*/
@Data
public class RedResultBean {
private String redUserName;//发布红包的用户名称
private String redUserAvatar;//发布红包的用户头像
private String redTitle;//发布红包的备注
private String redJb;//中奖的金币
private String redyl;//已经领取的个数
private List<RedBean> redList;
@Data
public static class RedBean {
private String redUserName;
private String redUserAvatar;
private String redNum;
private String redTime;
}
}

View File

@@ -50,6 +50,7 @@ public class RoomSettingBean implements MultiItemEntity {
/// 意见反馈
public static final int QXRoomSettingTypeRoomReport = 26;
public static final int QXRoomSettingTypeRoomFloatingScreen = 29;
public static final int QXRoomSettingTypeRoomFloatingRed = 30;
public static final int ITEM_TYPE_DEFAULT = 0;
public static final int ITEM_TYPE_WITH_ICON = 1;

View File

@@ -66,7 +66,6 @@ public class FirstChargeDialog extends BaseDialog<DialogFirstChargeBinding> {
mBinding.tvTitle2.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
heavenGiftAdapter = new HeavenGiftAdapter();
mBinding.bannerViewPager
.setPageMargin(15)
.setAutoPlay(false)
.setRevealWidth(0, 0)
.setIndicatorVisibility(View.VISIBLE)
@@ -160,18 +159,6 @@ public class FirstChargeDialog extends BaseDialog<DialogFirstChargeBinding> {
}
});
// List<HeavenGiftBean> list = new ArrayList<>();
// for (int i = 0; i < 7; i++) {
// HeavenGiftBean bean = new HeavenGiftBean();
// bean.setTitle("礼物" + i);
// bean.setPicture("");
// bean.setType(1);
// bean.setQuantity("x" + i);
// bean.setGold(i + "");
// bean.setDays(i + "天");
// list.add(bean);
// }
// mBinding.bannerViewPager.create(baseListData(list, 4));
}
private List<BaseListData<RoonGiftModel>> baseListData(List<RoonGiftModel> list, int chunkSize) {
@@ -207,6 +194,7 @@ public class FirstChargeDialog extends BaseDialog<DialogFirstChargeBinding> {
mBinding.tvTitle2.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle2());
mBinding.btn0.setText(firstChargeGiftBean.getGift_bag().get(0).getName());
list.addAll(firstChargeGiftBean.getGift_bag().get(0).getGift_list());
// mBinding.tvTitle22.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle2());
mBinding.bannerViewPager.create(baseListData(list, 4));
mBinding.btn1.setText(firstChargeGiftBean.getGift_bag().get(1).getName());

View File

@@ -3,6 +3,7 @@ package com.xscm.moduleutil.dialog;
import android.content.Context;
import android.content.res.Resources;
import android.os.CountDownTimer;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
@@ -14,12 +15,18 @@ import com.xscm.moduleutil.R;
import com.xscm.moduleutil.adapter.GiftAdapter;
import com.xscm.moduleutil.adapter.HeavenGiftAdapter;
import com.xscm.moduleutil.bean.BaseListData;
import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.HeavenGiftBean;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.databinding.DialogHeavenGiftBinding;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
import com.zhpan.bannerview.indicator.DrawableIndicator;
import com.zhpan.indicator.base.IIndicator;
import com.zhpan.indicator.enums.IndicatorSlideMode;
import io.reactivex.disposables.Disposable;
import java.util.ArrayList;
import java.util.List;
@@ -32,6 +39,8 @@ public class HeavenGiftDialog extends BaseDialog<DialogHeavenGiftBinding> {
GiftAdapter giftAdapter;
HeavenGiftAdapter heavenGiftAdapter;
private CountDownTimer countDownTimer;
public HeavenGiftDialog(@NonNull Context context) {
super(context,R.style.BaseDialogStyleH);
}
@@ -64,29 +73,87 @@ public class HeavenGiftDialog extends BaseDialog<DialogHeavenGiftBinding> {
.setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
.setAdapter(heavenGiftAdapter)
.create();
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.tvInvite, ColorManager.getInstance().getPrimaryColorInt(), 53);
mBinding.tvInvite.setTextColor(ColorManager.getInstance().getButtonColorInt());
}
@Override
public void initData() {
List<HeavenGiftBean> list=new ArrayList<>();
for (int i = 0; i < 7; i++){
HeavenGiftBean bean=new HeavenGiftBean();
bean.setTitle("礼物"+i);
bean.setPicture("");
bean.setType(1);
bean.setQuantity("x"+i);
bean.setGold(i+"");
bean.setDays(i+"");
list.add(bean);
RetrofitClient.getInstance().getDayDropGift(new BaseObserver<HeavenGiftBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(HeavenGiftBean heavenGiftBean) {
if (heavenGiftBean != null){
mBinding.tvTitle.setText(heavenGiftBean.getCounter().getCounter());
// 示例:假设从 HeavenGiftBean 中获取倒计时时间(单位:秒)
long countdownTime =Integer.parseInt(heavenGiftBean.getEffective_time()) * 1000L; // 转换为毫秒
startCountdown(countdownTime);
mBinding.bannerViewPager.create(baseListData(heavenGiftBean.getGift_list(),4));
}
}
});
// List<HeavenGiftBean> list=new ArrayList<>();
// for (int i = 0; i < 7; i++){
// HeavenGiftBean bean=new HeavenGiftBean();
// bean.setTitle("礼物"+i);
// bean.setPicture("");
// bean.setQuantity("x"+i);
// bean.setGold(i+"");
// bean.setDays(i+"天");
// list.add(bean);
// }
//// giftAdapter.setNewData(list);
// mBinding.bannerViewPager.create(baseListData(list,4));
}
private void startCountdown(long millisInFuture) {
if (countDownTimer != null) {
countDownTimer.cancel();
}
// giftAdapter.setNewData(list);
mBinding.bannerViewPager.create(baseListData(list,4));
countDownTimer = new CountDownTimer(millisInFuture, 1000) {
@Override
public void onTick(long millisUntilFinished) {
updateCountdownDisplay(millisUntilFinished);
}
@Override
public void onFinish() {
// 倒计时结束时的处理
mBinding.tvSj.setText("00:00:00");
}
}.start();
}
private List<BaseListData<HeavenGiftBean>> baseListData(List<HeavenGiftBean> list, int chunkSize){
List<BaseListData<HeavenGiftBean>> baseListData = new ArrayList<>();
private void updateCountdownDisplay(long millisUntilFinished) {
long totalSeconds = millisUntilFinished / 1000;
long hours = totalSeconds / 3600;
long minutes = (totalSeconds % 3600) / 60;
long seconds = totalSeconds % 60;
String timeFormatted = String.format("%02d:%02d:%02d", hours, minutes, seconds);
mBinding.tvSj.setText(timeFormatted);
}
@Override
public void dismiss() {
super.dismiss();
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
}
private List<BaseListData<HeavenGiftBean.GiftList>> baseListData(List<HeavenGiftBean.GiftList> list, int chunkSize){
List<BaseListData<HeavenGiftBean.GiftList>> baseListData = new ArrayList<>();
for (int i = 0; i < list.size(); i += chunkSize) {
BaseListData<HeavenGiftBean> baseListData1 = new BaseListData<>();
BaseListData<HeavenGiftBean.GiftList> baseListData1 = new BaseListData<>();
baseListData1.setData(list.subList(i, Math.min(i + chunkSize, list.size())));
baseListData.add(baseListData1);
}

View File

@@ -0,0 +1,214 @@
package com.xscm.moduleutil.dialog;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Paint;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RadioGroup;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.moduleutil.R;
import com.xscm.moduleutil.adapter.GiftAdapter;
import com.xscm.moduleutil.adapter.HeavenGiftAdapter;
import com.xscm.moduleutil.bean.BaseListData;
import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.databinding.DialogFirstChargeBinding;
import com.xscm.moduleutil.databinding.DialogNewPeopleBinding;
import com.xscm.moduleutil.databinding.DialogNewPeopleBindingImpl;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
import com.zhpan.bannerview.indicator.DrawableIndicator;
import com.zhpan.indicator.base.IIndicator;
import com.zhpan.indicator.enums.IndicatorSlideMode;
import io.reactivex.disposables.Disposable;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @data
* @description: 新人好礼
*/
public class NewPeopleDialog extends BaseDialog<DialogNewPeopleBinding> {
GiftAdapter giftAdapter;
HeavenGiftAdapter heavenGiftAdapter;
FirstChargeGiftBean firstChargeGiftBean;
private int type;
public NewPeopleDialog(@NonNull Context context) {
super(context, R.style.BaseDialogStyleH);
}
@Override
public int getLayoutId() {
return R.layout.dialog_new_people;
}
@Override
public void initView() {
setCancelable(false);
setCanceledOnTouchOutside(false);
Window window = getWindow();
window.setLayout((int) (ScreenUtils.getScreenWidth() * 375.f / 375), WindowManager.LayoutParams.WRAP_CONTENT);
mBinding.ivClose.setOnClickListener(v -> dismiss());
mBinding.tvTitle2.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
heavenGiftAdapter = new HeavenGiftAdapter();
mBinding.bannerViewPager
.setPageMargin(15)
.setAutoPlay(false)
.setRevealWidth(0, 0)
.setIndicatorVisibility(View.VISIBLE)
.setIndicatorView(getVectorDrawableIndicator())
.setIndicatorSlideMode(IndicatorSlideMode.NORMAL)
.setAdapter(heavenGiftAdapter)
.create();
mBinding.rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if (firstChargeGiftBean== null || firstChargeGiftBean.getGift_bag().size() == 0){
ToastUtils.showShort("暂无礼包");
return;
}
if (i == R.id.btn_0) {
List<RoonGiftModel> list = new ArrayList<>();
if (firstChargeGiftBean.getGift_bag().size() > 1) {
mBinding.tvTitle1.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle1());
mBinding.tvTitle2.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle2());
mBinding.btn0.setText(firstChargeGiftBean.getGift_bag().get(0).getName());
list.addAll(firstChargeGiftBean.getGift_bag().get(0).getGift_list());
mBinding.bannerViewPager.create(baseListData(list, 4));
}
type=1;
} else if (i == R.id.btn_1) {
List<RoonGiftModel> list = new ArrayList<>();
if (firstChargeGiftBean.getGift_bag().size() > 2) {
mBinding.tvTitle1.setText(firstChargeGiftBean.getGift_bag().get(1).getTitle1());
mBinding.tvTitle2.setText(firstChargeGiftBean.getGift_bag().get(1).getTitle2());
mBinding.btn1.setText(firstChargeGiftBean.getGift_bag().get(1).getName());
list.addAll(firstChargeGiftBean.getGift_bag().get(1).getGift_list());
mBinding.bannerViewPager.create(baseListData(list, 4));
}
type=2;
} else if (i == R.id.btn_2) {
List<RoonGiftModel> list = new ArrayList<>();
if (firstChargeGiftBean.getGift_bag().size() == 3) {
if (firstChargeGiftBean.getGift_bag().get(2)!=null) {
mBinding.tvTitle1.setText(firstChargeGiftBean.getGift_bag().get(2).getTitle1());
mBinding.tvTitle2.setText(firstChargeGiftBean.getGift_bag().get(2).getTitle2());
mBinding.btn2.setText(firstChargeGiftBean.getGift_bag().get(2).getName());
list.addAll(firstChargeGiftBean.getGift_bag().get(2).getGift_list());
mBinding.bannerViewPager.create(baseListData(list, 4));
type = 3;
}
}
}
}
});
mBinding.tvInvite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// RechargeDialogFragment.show(roomId, getSupportFragmentManager());
if (listener != null) {
listener.onFirstChargeConfirmed(firstChargeGiftBean,type);
}
}
});
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.tvInvite, ColorManager.getInstance().getPrimaryColorInt(), 53);
mBinding.tvInvite.setTextColor(ColorManager.getInstance().getButtonColorInt());
}
public interface OnFirstChargeListener {
void onFirstChargeConfirmed(FirstChargeGiftBean giftBean,int type);
void onFirstChargeCancelled();
}
private OnFirstChargeListener listener;
// 设置监听器的方法
public void setOnFirstChargeListener(OnFirstChargeListener listener) {
this.listener = listener;
}
@Override
public void initData() {
RetrofitClient.getInstance().getNewChargeGift(new BaseObserver<FirstChargeGiftBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(FirstChargeGiftBean firstChargeGiftBean) {
if (firstChargeGiftBean != null) {
showGift(firstChargeGiftBean);
}
}
});
}
private List<BaseListData<RoonGiftModel>> baseListData(List<RoonGiftModel> list, int chunkSize) {
List<BaseListData<RoonGiftModel>> baseListData = new ArrayList<>();
for (int i = 0; i < list.size(); i += chunkSize) {
BaseListData<RoonGiftModel> baseListData1 = new BaseListData<>();
baseListData1.setData(list.subList(i, Math.min(i + chunkSize, list.size())));
baseListData.add(baseListData1);
}
return baseListData;
}
private IIndicator getVectorDrawableIndicator() {
int dp6 = getResources().getDimensionPixelOffset(com.xscm.moduleutil.R.dimen.dp_6);
return new DrawableIndicator(getContext())
.setIndicatorGap(getResources().getDimensionPixelOffset(com.xscm.moduleutil.R.dimen.dp_2_5))
.setIndicatorDrawable(com.xscm.moduleutil.R.drawable.banner_indicator_nornal, com.xscm.moduleutil.R.drawable.banner_indicator_focus)
.setIndicatorSize(getResources().getDimensionPixelOffset(com.xscm.moduleutil.R.dimen.dp_13), dp6, getResources().getDimensionPixelOffset(com.xscm.moduleutil.R.dimen.dp_13), dp6);
}
private Resources getResources() {
return getContext().getResources();
}
public void showGift(FirstChargeGiftBean firstChargeGiftBean) {
this.firstChargeGiftBean = firstChargeGiftBean;
mBinding.rg.check(R.id.btn_0);
if (firstChargeGiftBean.getGift_bag() != null && firstChargeGiftBean.getGift_bag().size() > 0) {
if (firstChargeGiftBean.getGift_bag().size() >=0) {
type=1;
List<RoonGiftModel> list = new ArrayList<>();
mBinding.tvTitle1.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle1());
mBinding.tvTitle2.setText(firstChargeGiftBean.getGift_bag().get(0).getTitle2());
mBinding.btn0.setText(firstChargeGiftBean.getGift_bag().get(0).getName());
list.addAll(firstChargeGiftBean.getGift_bag().get(0).getGift_list());
mBinding.bannerViewPager.create(baseListData(list, 4));
mBinding.btn1.setText(firstChargeGiftBean.getGift_bag().get(1).getName());
mBinding.btn2.setText(firstChargeGiftBean.getGift_bag().get(2).getName());
mBinding.btn3.setText(firstChargeGiftBean.getGift_bag().get(3).getName());
} else if (firstChargeGiftBean.getGift_bag().size() == 2) {
// mBinding.rg.check(R.id.btn_0);
// mBinding.btn1.setVisibility(View.VISIBLE);
// mBinding.btn2.setVisibility(View.INVISIBLE);
} else if (firstChargeGiftBean.getGift_bag().size() == 3) {
// mBinding.rg.check(R.id.btn_0);
// mBinding.btn1.setVisibility(View.VISIBLE);
// mBinding.btn2.setVisibility(View.VISIBLE);
}
// mBinding.rg.check(R.id.btn_0);
}
}
}

View File

@@ -30,7 +30,7 @@ public class GiftLotteryContacts {
public interface IRoomPre extends IPresenter {
void getGiftList(String giftBagId,String roomId);
void drawGiftList(String giftBagId,String gift_user_ids,String roomId,String num,String heart_id);
void drawGiftList(String giftBagId,String gift_user_ids,String roomId,String num,String heart_id,String auction_id);
void getMyRecord(String giftBagId,String page,String pageSize,int type);//我的抽奖记录 type: 1:我的抽奖 2全服抽奖

View File

@@ -100,19 +100,21 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment<GiftLotteryPresente
private BlindBoxBean.XlhData xlhData;
private int icon;//金币金额
private String heart_id = "";
private String auction_id="";
@Override
protected GiftLotteryPresenter bindPresenter() {
return new GiftLotteryPresenter(this, getActivity());
}
public static GiftLotteryDialog newInstance(String giftBagId, String roomId, String userIds, String heart_id) {
public static GiftLotteryDialog newInstance(String giftBagId, String roomId, String userIds, String heart_id,String auction_id) {
GiftLotteryDialog dialog = new GiftLotteryDialog();
Bundle args = new Bundle();
args.putString("giftBagId", giftBagId);
args.putString("roomId", roomId);
args.putString("userIds", userIds);
args.putString("heart_id", heart_id);
args.putString("auction_id", auction_id);
dialog.setArguments(args);
return dialog;
}
@@ -136,6 +138,7 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment<GiftLotteryPresente
// 根据userIds确定类型
userIdType = LotteryEvent.fromLotteryEvent(giftBagId);
heart_id = getArguments().getString("heart_id");
auction_id = getArguments().getString("auction_id");
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
@@ -379,7 +382,7 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment<GiftLotteryPresente
isDrawing = true;
// init(1);
startType = 1;
MvpPre.drawGiftList(giftBagId, userIds, roomId, "1", heart_id);
MvpPre.drawGiftList(giftBagId, userIds, roomId, "1", heart_id,auction_id);
} else {
// com.hjq.toast.ToastUtils.show("正在抽奖中...");
return;
@@ -389,7 +392,7 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment<GiftLotteryPresente
isDrawing = true;
// init(2);
startType = 2;
MvpPre.drawGiftList(giftBagId, userIds, roomId, "6", heart_id);
MvpPre.drawGiftList(giftBagId, userIds, roomId, "6", heart_id,auction_id);
} else {
// com.hjq.toast.ToastUtils.show("正在抽奖中...");
@@ -399,7 +402,7 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment<GiftLotteryPresente
isDrawing = true;
// init(3);
startType = 3;
MvpPre.drawGiftList(giftBagId, userIds, roomId, "9", heart_id);
MvpPre.drawGiftList(giftBagId, userIds, roomId, "9", heart_id,auction_id);
} else {
// com.hjq.toast.ToastUtils.show("正在抽奖中...");
}

View File

@@ -42,8 +42,8 @@ public class GiftLotteryPresenter extends BasePresenter<GiftLotteryContacts.View
}
@Override
public void drawGiftList(String giftBagId, String gift_user_ids, String roomId, String num,String heart_id) {
api.drawGiftList(giftBagId, gift_user_ids, roomId, num,heart_id, new BaseObserver<BlindReslutBean>() {
public void drawGiftList(String giftBagId, String gift_user_ids, String roomId, String num,String heart_id,String auction_id) {
api.drawGiftList(giftBagId, gift_user_ids, roomId, num,heart_id,auction_id, new BaseObserver<BlindReslutBean>() {
@Override
public void onSubscribe(Disposable d) {

View File

@@ -1,65 +1,7 @@
package com.xscm.moduleutil.http;
import com.xscm.moduleutil.bean.AlbumBean;
import com.xscm.moduleutil.bean.AppPay;
import com.xscm.moduleutil.bean.AppUpdateModel;
import com.xscm.moduleutil.bean.BannerModel;
import com.xscm.moduleutil.bean.BindDetail;
import com.xscm.moduleutil.bean.BindType;
import com.xscm.moduleutil.bean.BlackUserBean;
import com.xscm.moduleutil.bean.CharmRankingResp;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.bean.CommentBean;
import com.xscm.moduleutil.bean.ExpandColumnBean;
import com.xscm.moduleutil.bean.FirstChargeBean;
import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.GiftBean;
import com.xscm.moduleutil.bean.GiftBoxRecordBean;
import com.xscm.moduleutil.bean.GiftLabelBean;
import com.xscm.moduleutil.bean.GiftName;
import com.xscm.moduleutil.bean.GiftPackBean;
import com.xscm.moduleutil.bean.GiftPackListCount;
import com.xscm.moduleutil.bean.GiftUserWallBean;
import com.xscm.moduleutil.bean.HeadlineBean;
import com.xscm.moduleutil.bean.HeatedBean;
import com.xscm.moduleutil.bean.HostBean;
import com.xscm.moduleutil.bean.MusicSongBean;
import com.xscm.moduleutil.bean.MyBagDataBean;
import com.xscm.moduleutil.bean.MyCpRoom;
import com.xscm.moduleutil.bean.MyFootResp;
import com.xscm.moduleutil.bean.MyRoomBean;
import com.xscm.moduleutil.bean.NewsDataBean;
import com.xscm.moduleutil.bean.NewsMessageList;
import com.xscm.moduleutil.bean.PersonaltyBean;
import com.xscm.moduleutil.bean.PkSwTokenBean;
import com.xscm.moduleutil.bean.PlaceholderBean;
import com.xscm.moduleutil.bean.RealNameBean;
import com.xscm.moduleutil.bean.RechargeBean;
import com.xscm.moduleutil.bean.RelationCardBean;
import com.xscm.moduleutil.bean.RevenueBean;
import com.xscm.moduleutil.bean.RewardUserBean;
import com.xscm.moduleutil.bean.RoomBgBean;
import com.xscm.moduleutil.bean.RoomCharmRankBean;
import com.xscm.moduleutil.bean.RoomDetails;
import com.xscm.moduleutil.bean.RoomRelationBean;
import com.xscm.moduleutil.bean.RoomSearchResp;
import com.xscm.moduleutil.bean.RoomSubsidy;
import com.xscm.moduleutil.bean.RoomTime;
import com.xscm.moduleutil.bean.RoomTypeModel;
import com.xscm.moduleutil.bean.RoomUserCharmListBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.bean.SearchAll;
import com.xscm.moduleutil.bean.SongMusicBean;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.TopRoom;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.bean.UserOnlineStatusBean;
import com.xscm.moduleutil.bean.UserTagBean;
import com.xscm.moduleutil.bean.WalletBean;
import com.xscm.moduleutil.bean.WalletConfig;
import com.xscm.moduleutil.bean.WithdrawalBean;
import com.xscm.moduleutil.bean.*;
import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean;
import com.xscm.moduleutil.bean.blindboxwheel.BlindReslutBean;
import com.xscm.moduleutil.bean.blindboxwheel.XlhDrawBean;
@@ -520,6 +462,14 @@ public interface ApiServer {
@GET(Constants.GET_FIRST_CHARGE_GIFT)
Call<BaseModel<FirstChargeGiftBean>> firstChargeGift();
@GET(Constants.GET_NEW_CHARGE_GIFT)
Call<BaseModel<FirstChargeGiftBean>> getNewChargeGift();
@GET(Constants.GET_ACTIVITIES_PERMISSION)
Call<BaseModel<ActivitiesPermission>> activitiesPermission();
@GET(Constants.GET_DAY_DROP_GIFT)
Call<BaseModel<HeavenGiftBean>> getDayDropGift();
@GET(Constants.GET_WALLET)
Call<BaseModel<WalletBean>> wallet();
@@ -754,7 +704,7 @@ public interface ApiServer {
@FormUrlEncoded
@POST(Constants.POST_DRAW_GIFT_LIST)
Call<BaseModel<BlindReslutBean>> 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);
Call<BaseModel<BlindReslutBean>> 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<BaseModel<List<GiftBean>>> getMyRecord(@Query("gift_bag_id")String gift_bag_id,@Query("page")String page,@Query("page_size")String page_size);

View File

@@ -16,68 +16,7 @@ import com.franmontiel.persistentcookiejar.cache.SetCookieCache;
import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor;
import com.google.gson.reflect.TypeToken;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.AlbumBean;
import com.xscm.moduleutil.bean.AppPay;
import com.xscm.moduleutil.bean.AppUpdateModel;
import com.xscm.moduleutil.bean.BannerModel;
import com.xscm.moduleutil.bean.BindDetail;
import com.xscm.moduleutil.bean.BindType;
import com.xscm.moduleutil.bean.BlackUserBean;
import com.xscm.moduleutil.bean.CharmRankingResp;
import com.xscm.moduleutil.bean.CircleListBean;
import com.xscm.moduleutil.bean.CommentBean;
import com.xscm.moduleutil.bean.ExpandColumnBean;
import com.xscm.moduleutil.bean.FirstChargeBean;
import com.xscm.moduleutil.bean.FirstChargeGiftBean;
import com.xscm.moduleutil.bean.GiftBean;
import com.xscm.moduleutil.bean.GiftBoxBean;
import com.xscm.moduleutil.bean.GiftBoxRecordBean;
import com.xscm.moduleutil.bean.GiftLabelBean;
import com.xscm.moduleutil.bean.GiftName;
import com.xscm.moduleutil.bean.GiftPackBean;
import com.xscm.moduleutil.bean.GiftPackListCount;
import com.xscm.moduleutil.bean.GiftUserWallBean;
import com.xscm.moduleutil.bean.HeadlineBean;
import com.xscm.moduleutil.bean.HeatedBean;
import com.xscm.moduleutil.bean.HostBean;
import com.xscm.moduleutil.bean.MusicSongBean;
import com.xscm.moduleutil.bean.MyBagDataBean;
import com.xscm.moduleutil.bean.MyCpRoom;
import com.xscm.moduleutil.bean.MyFootResp;
import com.xscm.moduleutil.bean.MyRoomBean;
import com.xscm.moduleutil.bean.NewsDataBean;
import com.xscm.moduleutil.bean.NewsMessageList;
import com.xscm.moduleutil.bean.PersonaltyBean;
import com.xscm.moduleutil.bean.PkSwTokenBean;
import com.xscm.moduleutil.bean.PlaceholderBean;
import com.xscm.moduleutil.bean.RealNameBean;
import com.xscm.moduleutil.bean.RechargeBean;
import com.xscm.moduleutil.bean.RelationCardBean;
import com.xscm.moduleutil.bean.RevenueBean;
import com.xscm.moduleutil.bean.RewardUserBean;
import com.xscm.moduleutil.bean.RoomBgBean;
import com.xscm.moduleutil.bean.RoomCharmRankBean;
import com.xscm.moduleutil.bean.RoomDetails;
import com.xscm.moduleutil.bean.RoomRelationBean;
import com.xscm.moduleutil.bean.RoomSearchResp;
import com.xscm.moduleutil.bean.RoomSingleton;
import com.xscm.moduleutil.bean.RoomSubsidy;
import com.xscm.moduleutil.bean.RoomSubsidyDetails;
import com.xscm.moduleutil.bean.RoomTime;
import com.xscm.moduleutil.bean.RoomTypeModel;
import com.xscm.moduleutil.bean.RoomUserCharmListBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.bean.SearchAll;
import com.xscm.moduleutil.bean.SongMusicBean;
import com.xscm.moduleutil.bean.ThemeBean;
import com.xscm.moduleutil.bean.TopRoom;
import com.xscm.moduleutil.bean.UserBean;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.bean.UserOnlineStatusBean;
import com.xscm.moduleutil.bean.UserTagBean;
import com.xscm.moduleutil.bean.WalletBean;
import com.xscm.moduleutil.bean.WalletConfig;
import com.xscm.moduleutil.bean.WithdrawalBean;
import com.xscm.moduleutil.bean.*;
import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean;
import com.xscm.moduleutil.bean.blindboxwheel.BlindReslutBean;
import com.xscm.moduleutil.bean.blindboxwheel.XlhDrawBean;
@@ -1265,13 +1204,22 @@ public class RetrofitClient {
BaseModel<RealNameBean> baseModel = response.body();
if (baseModel.getCode() == 1) {
observer.onNext(baseModel.getData());
}else if (baseModel.getCode() == 0){
ToastUtils.showShort(baseModel.getMsg());
}else if (baseModel.getCode() == 301){
try {
CommonAppContext.getInstance().clearLoginInfo();
ToastUtils.showShort(baseModel.getMsg());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
}
@Override
public void onFailure(Call<BaseModel<RealNameBean>> call, Throwable t) {
t.printStackTrace();
}
});
}
@@ -1397,11 +1345,11 @@ public class RetrofitClient {
observer.onNext(null);
}else if (listBaseModel.getCode()==301){
try {
ToastUtils.showShort(listBaseModel.getMsg());
CommonAppContext.getInstance().clearLoginInfo();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
ToastUtils.showShort(listBaseModel.getMsg());
}
}
}
@@ -1430,11 +1378,12 @@ public class RetrofitClient {
observer.onNext(null);
}else if (listBaseModel.getCode()==301){
try {
ToastUtils.showShort(listBaseModel.getMsg());
CommonAppContext.getInstance().clearLoginInfo();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
ToastUtils.showShort(listBaseModel.getMsg());
}
}
}
@@ -1459,10 +1408,11 @@ public class RetrofitClient {
}else if (listBaseModel.getCode() == 301) {
try {
CommonAppContext.getInstance().clearLoginInfo();
ToastUtils.showShort(listBaseModel.getMsg());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
ToastUtils.showShort(listBaseModel.getMsg());
}
}
}
@@ -1965,8 +1915,7 @@ public class RetrofitClient {
});
}
public void getRoomOnline(String roomId, String page, String
page_limit, BaseObserver<RoomOnline> observer) {
public void getRoomOnline(String roomId, String page, String page_limit, BaseObserver<RoomOnline> observer) {
sApiServer.getRoomOnline(roomId, page, page_limit).enqueue(new Callback<BaseModel<RoomOnline>>() {
@Override
public void onResponse(Call<BaseModel<RoomOnline>> call, Response<BaseModel<RoomOnline>> response) {
@@ -1985,6 +1934,33 @@ public class RetrofitClient {
});
}
public void activitiesPermission(BaseObserver<ActivitiesPermission> observer){
sApiServer.activitiesPermission().enqueue(new Callback<BaseModel<ActivitiesPermission>>() {
@Override
public void onResponse(Call<BaseModel<ActivitiesPermission>> call, Response<BaseModel<ActivitiesPermission>> response) {
if (response.code() == 200) {
BaseModel<ActivitiesPermission> activitiesPermissionBaseModel = response.body();
if (activitiesPermissionBaseModel.getCode() == 1) {
observer.onNext(activitiesPermissionBaseModel.getData());
}else if (activitiesPermissionBaseModel.getCode()==0){
ToastUtils.showShort(activitiesPermissionBaseModel.getMsg());
}else if (activitiesPermissionBaseModel.getCode()==301){
try {
CommonAppContext.getInstance().clearLoginInfo();
ToastUtils.showShort(activitiesPermissionBaseModel.getMsg());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
}
@Override
public void onFailure(Call<BaseModel<ActivitiesPermission>> call, Throwable t) {
t.printStackTrace();
}
});
}
public void wallet(BaseObserver<WalletBean> observer) {
sApiServer.wallet().enqueue(new Callback<BaseModel<WalletBean>>() {
@Override
@@ -2282,7 +2258,11 @@ public class RetrofitClient {
sApiServer.roomAuctionJoin(auctionId, userId, giftId, num, type).enqueue(new ApiResponseCallback<RoomAuction.AuctionListBean>(CommonAppContext.getInstance()) {
@Override
public void onSuccess(RoomAuction.AuctionListBean data) {
observer.onNext(data);
if (data != null) {
observer.onNext(data);
}else {
observer.onNext(new RoomAuction.AuctionListBean());
}
}
});
// .enqueue(new Callback<BaseModel<RoomAuction.AuctionListBean>>() {
@@ -2543,6 +2523,27 @@ public class RetrofitClient {
});
}
public void getDayDropGift(BaseObserver<HeavenGiftBean> observer){
sApiServer.getDayDropGift().enqueue(new Callback<BaseModel<HeavenGiftBean>>() {
@Override
public void onResponse(Call<BaseModel<HeavenGiftBean>> call, Response<BaseModel<HeavenGiftBean>> response) {
if (response.code()==200){
BaseModel<HeavenGiftBean> data = response.body();
if (data.getCode()==1){
observer.onNext(data.getData());
}else if (data.getCode()==0){
ToastUtils.showShort(data.getMsg());
}
}
}
@Override
public void onFailure(Call<BaseModel<HeavenGiftBean>> call, Throwable t) {
t.printStackTrace();
}
});
}
public void firstChargeGift(BaseObserver<FirstChargeGiftBean> observer) {
// sApiServer.firstChargeGift().compose(new DefaultTransformer<>()).subscribe(observer);
sApiServer.firstChargeGift().enqueue(new Callback<BaseModel<FirstChargeGiftBean>>() {
@@ -2558,63 +2559,28 @@ public class RetrofitClient {
@Override
public void onFailure(Call<BaseModel<FirstChargeGiftBean>> call, Throwable t) {
t.printStackTrace();
}
});
}
public void getNewChargeGift(BaseObserver<FirstChargeGiftBean> observer) {
sApiServer.getNewChargeGift().enqueue(new Callback<BaseModel<FirstChargeGiftBean>>() {
@Override
public void onResponse(Call<BaseModel<FirstChargeGiftBean>> call, Response<BaseModel<FirstChargeGiftBean>> response) {
if (response.code() == 200) {
BaseModel<FirstChargeGiftBean> data = response.body();
if (data.getCode() == 1) {
observer.onNext(data.getData());
}
}
}
@Override
public void onFailure(Call<BaseModel<FirstChargeGiftBean>> call, Throwable t) {
t.printStackTrace();
}
});
// .enqueue(new Callback<ResponseBody>() {
// @Override
// public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
// if (response.code() == 200) {
// try {
// String json = response.body().string();
// BaseModel<FirstChargeGiftBean> data =GsonUtils.fromJson(json, BaseModel.class);
//// String data1=GsonUtils.toJson(data.getData());
//// LogUtils.e("data1",data.getData());
//// FirstChargeGiftBean firstChargeGiftBean=new FirstChargeGiftBean();
//// firstChargeGiftBean.setName(data.getData().getName());
//// List<FirstChargeGiftBean.GiftBag> giftBags=new ArrayList<>();
//// for (int i=0;i<data.getData().getGift_bag().size();i++){
////
//// FirstChargeGiftBean.GiftBag giftBag=new FirstChargeGiftBean.GiftBag();
//// giftBag.setName(data.getData().getGift_bag().get(i).getName());
//// giftBag.setMoney(data.getData().getGift_bag().get(i).getMoney());
//// giftBag.setTitle1(data.getData().getGift_bag().get(i).getTitle1());
//// giftBag.setTitle2(data.getData().getGift_bag().get(i).getTitle2());
//// List<RoonGiftModel> roonGiftModels=new ArrayList<>();
//// for (int j=0;j<data.getData().getGift_bag().get(i).getGift_list().size();j++){
//// RoonGiftModel roonGiftModel=new RoonGiftModel();
//// roonGiftModel.setGift_name(data.getData().getGift_bag().get(i).getGift_list().get(j).getGift_name());
//// roonGiftModel.setNum(data.getData().getGift_bag().get(i).getGift_list().get(j).getNum());
//// roonGiftModel.setGift_price(data.getData().getGift_bag().get(i).getGift_list().get(j).getGift_price());
//// roonGiftModel.setType(data.getData().getGift_bag().get(i).getGift_list().get(j).getType());
//// roonGiftModel.setBase_image(data.getData().getGift_bag().get(i).getGift_list().get(j).getBase_image());
//// roonGiftModels.add(roonGiftModel);
//// }
//// giftBag.setGift_list(roonGiftModels);
//// giftBags.add(giftBag);
//// }
////
//// firstChargeGiftBean.setGift_bag(giftBags);
//
//
//
//// List<FirstChargeGiftBean> data2=GsonUtils.fromJson(data1, new TypeToken<List<FirstChargeGiftBean>>(){}.getType());
//// observer.onNext(data2.get(0));
//// FirstChargeGiftBean firstChargeGiftBean = GsonUtils.fromJson(data1, FirstChargeGiftBean.class);
//// Object data3=GsonUtils.fromJson(data1, FirstChargeGiftBean.class);
//// LogUtils.e("data3",data3);
// observer.onNext(data.getData());
// }catch (Exception e){
// e.printStackTrace();
// }
// }
// }
//
// @Override
// public void onFailure(Call<ResponseBody> call, Throwable t) {
// t.printStackTrace();
// }
// });
}
public void applyPit(String roomId, String pitNumber, BaseObserver<String> observer) {
@@ -3599,9 +3565,8 @@ public class RetrofitClient {
}
/// 盲盒转盘抽奖
public void drawGiftList(String giftBagId, String gift_user_ids, String roomId, String
num, String heart_id, BaseObserver<BlindReslutBean> observer) {
sApiServer.drawGiftList(giftBagId, gift_user_ids, roomId, num, heart_id).enqueue(new Callback<BaseModel<BlindReslutBean>>() {
public void drawGiftList(String giftBagId, String gift_user_ids, String roomId, String num, String heart_id,String auction_id, BaseObserver<BlindReslutBean> observer) {
sApiServer.drawGiftList(giftBagId, gift_user_ids, roomId, num, heart_id, auction_id).enqueue(new Callback<BaseModel<BlindReslutBean>>() {
@Override
public void onResponse(Call<BaseModel<BlindReslutBean>> call, Response<BaseModel<BlindReslutBean>> response) {
if (response.code() == 200) {

View File

@@ -9,6 +9,7 @@ public class ARouteConstants {
public static final String USER_ALBUM_DETAIL = "/modulevocal/AlbumDetailActivity";
public static final String CREATE_ALBUM = "/modulevocal/CreateAlbumActivity";
public static final String ROOM_DETAILS = "/moduleroom/RoomActivity";
public static final String ROOM_RED_RESULT = "/moduleroom/RedResultActivity";//红包结果展示页面
public static final String UNDERAGE_ACTIVITY = "/modulevocal/UnderageActivity";
public static final String MY_ROOM = "/modulevocal/MyRoomActivity";

View File

@@ -0,0 +1,44 @@
package com.xscm.moduleutil.view;
import android.content.Context;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import com.xscm.moduleutil.R;
import org.jetbrains.annotations.NotNull;
/**
* 这是抢红包的自定义view
*/
public class CustomDialogView extends ConstraintLayout {
public CustomDialogView(@NonNull @NotNull Context context) {
super(context);
init();
}
public CustomDialogView(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomDialogView(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public CustomDialogView(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
// 初始化视图
// 设置背景色
setBackground(ContextCompat.getDrawable(getContext(), R.drawable.bg_red_16_envel));
}
}

View File

@@ -0,0 +1,860 @@
package com.xscm.moduleutil.view;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Color;
import android.text.InputType;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.xscm.moduleutil.R;
public class QXRedBagSendView extends FrameLayout {
// Properties
private String redBagType = "1";
private String redBagContentType = "1";
private String redBagTime = "0";
private int currentPage = 0;
private boolean isFromRule = false;
// UI Components
private LinearLayout mainContainer;
private ImageView bgImageView;
private TextView titleLabel;
private Button helpBtn;
private Button backBtn;
private Button closeBtn;
private Button nextBtn;
private Button commitBtn;
private LinearLayout firstContentView;
private Button normalRedBagBtn;
private Button pwdRedBagBtn;
private LinearLayout firstPwdView;
private EditText pwdTextField;
private LinearLayout firstTimeView;
private View scrollBgView;
private Button coinRedBagBtn;
private Button diamondRedBagBtn;
private Button selectedRedBagTimeBtn;
private LinearLayout nextContentView;
private TextView moneyLabel;
private TextView moneyUnitLabel;
private EditText moneyTextField;
private EditText countTextField;
private EditText remarkTextField;
private Button noDrawAuthBtn;
private Button collectDrawAuthBtn;
private Button upSeatDrawAuthBtn;
private LinearLayout ruleContentView;
private WebView webView;
private final int[] timeArray = {0, 1, 2, 5, 10};
private final int[] drawAuthArray = {0, 1, 2};
public QXRedBagSendView(Context context) {
super(context);
init(context);
}
public QXRedBagSendView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public QXRedBagSendView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
setBackgroundColor(Color.parseColor("#80000000"));
initMainContainer(context);
initTitleBar(context);
initContentArea(context);
initButtons(context);
// 默认选择普通红包
selectedRedBagTypeAction(normalRedBagBtn);
}
private void initMainContainer(Context context) {
mainContainer = new LinearLayout(context);
mainContainer.setOrientation(LinearLayout.VERTICAL);
LayoutParams containerParams = new LayoutParams(
dpToPx(345),
dpToPx(454)
);
containerParams.gravity = Gravity.CENTER;
mainContainer.setLayoutParams(containerParams);
// 背景图片
bgImageView = new ImageView(context);
bgImageView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
// 设置背景资源需要你在res/drawable中添加对应的图片
bgImageView.setBackgroundResource(R.mipmap.red_en);
// bgImageView.setBackgroundColor(Color.parseColor("#FFD700")); // 临时颜色
// 将背景图片添加到主容器
mainContainer.addView(bgImageView);
addView(mainContainer);
}
private void initTitleBar(Context context) {
// 标题栏容器
LinearLayout titleContainer = new LinearLayout(context);
titleContainer.setOrientation(LinearLayout.HORIZONTAL);
titleContainer.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams titleContainerParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
titleContainerParams.setMargins(0, dpToPx(15), 0, 0);
titleContainer.setLayoutParams(titleContainerParams);
// 帮助按钮
helpBtn = createIconButton(context);
helpBtn.setBackgroundColor(Color.TRANSPARENT);
helpBtn.setOnClickListener(v -> helpAction());
titleContainer.addView(helpBtn);
// 返回按钮
backBtn = createIconButton(context);
backBtn.setBackgroundColor(Color.TRANSPARENT);
backBtn.setOnClickListener(v -> backAction());
backBtn.setVisibility(View.GONE);
titleContainer.addView(backBtn);
// 标题
titleLabel = new TextView(context);
titleLabel.setText("直播间红包");
titleLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
titleLabel.setTextColor(Color.WHITE);
titleLabel.setTypeface(titleLabel.getTypeface(), android.graphics.Typeface.BOLD);
LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1
);
titleLabel.setLayoutParams(titleParams);
titleLabel.setGravity(Gravity.CENTER);
titleContainer.addView(titleLabel);
// 关闭按钮
closeBtn = createIconButton(context);
closeBtn.setBackgroundColor(Color.TRANSPARENT);
closeBtn.setOnClickListener(v -> closeAction());
titleContainer.addView(closeBtn);
// 将标题栏添加到主容器(在背景图片之上)
mainContainer.addView(titleContainer);
}
private void initContentArea(Context context) {
// 内容区域容器
LinearLayout contentArea = new LinearLayout(context);
contentArea.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
0, 1
);
contentParams.setMargins(dpToPx(15), dpToPx(15), dpToPx(15), dpToPx(15));
contentArea.setLayoutParams(contentParams);
initFirstContentView(context, contentArea);
initNextContentView(context, contentArea);
initRuleView(context, contentArea);
mainContainer.addView(contentArea);
}
private void initButtons(Context context) {
// 按钮容器
LinearLayout buttonContainer = new LinearLayout(context);
buttonContainer.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
buttonParams.setMargins(dpToPx(15), 0, dpToPx(15), dpToPx(15));
buttonContainer.setLayoutParams(buttonParams);
// 下一步按钮
nextBtn = createActionButton(context, "下一步");
nextBtn.setOnClickListener(v -> nextAction());
buttonContainer.addView(nextBtn);
// 提交按钮
commitBtn = createActionButton(context, "发红包");
commitBtn.setOnClickListener(v -> commitAction());
commitBtn.setVisibility(View.GONE);
buttonContainer.addView(commitBtn);
mainContainer.addView(buttonContainer);
}
private void initFirstContentView(Context context, ViewGroup parent) {
firstContentView = new LinearLayout(context);
firstContentView.setOrientation(LinearLayout.VERTICAL);
firstContentView.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
parent.addView(firstContentView);
// 顶部视图 - 参与领取限制
LinearLayout firstTopView = createCardView(context);
firstTopView.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams topParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(88)
);
topParams.bottomMargin = dpToPx(12);
firstTopView.setLayoutParams(topParams);
firstContentView.addView(firstTopView);
TextView topTitleLabel = createTitleLabel(context, "参与领取限制");
firstTopView.addView(topTitleLabel);
LinearLayout typeButtonContainer = new LinearLayout(context);
typeButtonContainer.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
typeButtonContainer.setWeightSum(2);
firstTopView.addView(typeButtonContainer);
normalRedBagBtn = createTypeButton(context, "普通红包");
normalRedBagBtn.setOnClickListener(v -> selectedRedBagTypeAction(normalRedBagBtn));
typeButtonContainer.addView(normalRedBagBtn);
pwdRedBagBtn = createTypeButton(context, "口令红包");
pwdRedBagBtn.setOnClickListener(v -> selectedRedBagTypeAction(pwdRedBagBtn));
typeButtonContainer.addView(pwdRedBagBtn);
// 口令输入视图
firstPwdView = createInputCard(context, "口令", "请输入口令");
pwdTextField = (EditText) ((LinearLayout) firstPwdView).getChildAt(1);
firstContentView.addView(firstPwdView);
// 时间选择视图
firstTimeView = createCardView(context);
firstTimeView.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams timeParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(88)
);
timeParams.bottomMargin = dpToPx(12);
firstTimeView.setLayoutParams(timeParams);
firstContentView.addView(firstTimeView);
TextView timeTitleLabel = createTitleLabel(context, "开奖倒计时");
firstTimeView.addView(timeTitleLabel);
LinearLayout timeButtonContainer = new LinearLayout(context);
timeButtonContainer.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
firstTimeView.addView(timeButtonContainer);
// 创建时间选择按钮
for (int time : timeArray) {
Button timeBtn = createTimeButton(context, time);
timeBtn.setOnClickListener(v -> redBagTimeAction(timeBtn));
if (time == 0) {
timeBtn.setSelected(true);
selectedRedBagTimeBtn = timeBtn;
}
timeButtonContainer.addView(timeBtn);
}
// 红包类型选择
LinearLayout bottomView = createCardView(context);
bottomView.setOrientation(LinearLayout.HORIZONTAL);
bottomView.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams bottomParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(48)
);
bottomView.setLayoutParams(bottomParams);
firstContentView.addView(bottomView);
TextView redBagTypeLabel = createTitleLabel(context, "红包类型");
bottomView.addView(redBagTypeLabel);
// 红包类型切换容器
RelativeLayout typeSwitchContainer = new RelativeLayout(context);
LinearLayout.LayoutParams switchParams = new LinearLayout.LayoutParams(
dpToPx(130),
dpToPx(26)
);
switchParams.gravity = Gravity.CENTER_VERTICAL;
typeSwitchContainer.setLayoutParams(switchParams);
typeSwitchContainer.setBackgroundColor(Color.parseColor("#BA230A"));
typeSwitchContainer.setPadding(dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2));
bottomView.addView(typeSwitchContainer);
scrollBgView = new View(context);
RelativeLayout.LayoutParams scrollParams = new RelativeLayout.LayoutParams(
dpToPx(63),
ViewGroup.LayoutParams.MATCH_PARENT
);
scrollBgView.setLayoutParams(scrollParams);
scrollBgView.setBackgroundColor(Color.parseColor("#FDE8A3"));
typeSwitchContainer.addView(scrollBgView);
coinRedBagBtn = createContentTypeButton(context, "金币红包");
coinRedBagBtn.setSelected(true);
coinRedBagBtn.setOnClickListener(v -> redBagContentTypeAction(coinRedBagBtn));
typeSwitchContainer.addView(coinRedBagBtn);
diamondRedBagBtn = createContentTypeButton(context, "钻石红包");
diamondRedBagBtn.setOnClickListener(v -> redBagContentTypeAction(diamondRedBagBtn));
typeSwitchContainer.addView(diamondRedBagBtn);
}
private void initNextContentView(Context context, ViewGroup parent) {
nextContentView = new LinearLayout(context);
nextContentView.setOrientation(LinearLayout.VERTICAL);
nextContentView.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
nextContentView.setVisibility(View.GONE);
parent.addView(nextContentView);
// 可用余额标签
moneyLabel = new TextView(context);
moneyLabel.setText("-金币可用");
moneyLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
moneyLabel.setTextColor(Color.WHITE);
LinearLayout.LayoutParams moneyLabelParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
moneyLabelParams.gravity = Gravity.END;
moneyLabel.setLayoutParams(moneyLabelParams);
nextContentView.addView(moneyLabel);
// 金额输入
LinearLayout moneyBgView = createInputCard(context, "金额", "请输入红包金额");
moneyTextField = (EditText) moneyBgView.getChildAt(1);
moneyUnitLabel = new TextView(context);
moneyUnitLabel.setText("金币");
moneyUnitLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
moneyUnitLabel.setTextColor(Color.parseColor("#666666"));
LinearLayout.LayoutParams unitParams = new LinearLayout.LayoutParams(
dpToPx(30),
ViewGroup.LayoutParams.WRAP_CONTENT
);
moneyUnitLabel.setLayoutParams(unitParams);
moneyBgView.addView(moneyUnitLabel);
nextContentView.addView(moneyBgView);
// 个数输入
LinearLayout countBgView = createInputCard(context, "个数", "请输入红包数量");
countTextField = (EditText) countBgView.getChildAt(1);
TextView countUnitLabel = new TextView(context);
countUnitLabel.setText("");
countUnitLabel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
countUnitLabel.setTextColor(Color.parseColor("#666666"));
countUnitLabel.setLayoutParams(unitParams);
countBgView.addView(countUnitLabel);
nextContentView.addView(countBgView);
// 领取条件
LinearLayout drawAuthBgView = createCardView(context);
drawAuthBgView.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams authParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(88)
);
authParams.bottomMargin = dpToPx(12);
drawAuthBgView.setLayoutParams(authParams);
nextContentView.addView(drawAuthBgView);
TextView authTitleLabel = createTitleLabel(context, "条件");
drawAuthBgView.addView(authTitleLabel);
LinearLayout authButtonContainer = new LinearLayout(context);
authButtonContainer.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
drawAuthBgView.addView(authButtonContainer);
// 创建领取条件按钮
noDrawAuthBtn = createAuthButton(context, "");
noDrawAuthBtn.setSelected(true);
noDrawAuthBtn.setOnClickListener(v -> drawAuthAction(noDrawAuthBtn));
authButtonContainer.addView(noDrawAuthBtn);
collectDrawAuthBtn = createAuthButton(context, "收藏房间");
collectDrawAuthBtn.setOnClickListener(v -> drawAuthAction(collectDrawAuthBtn));
authButtonContainer.addView(collectDrawAuthBtn);
upSeatDrawAuthBtn = createAuthButton(context, "仅麦上用户");
upSeatDrawAuthBtn.setOnClickListener(v -> drawAuthAction(upSeatDrawAuthBtn));
authButtonContainer.addView(upSeatDrawAuthBtn);
// 备注输入
LinearLayout remarkBgView = createInputCard(context, "备注", "请输入备注");
remarkTextField = (EditText) remarkBgView.getChildAt(1);
nextContentView.addView(remarkBgView);
}
private void initRuleView(Context context, ViewGroup parent) {
ruleContentView = new LinearLayout(context);
ruleContentView.setOrientation(LinearLayout.VERTICAL);
ruleContentView.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
ruleContentView.setBackgroundColor(Color.WHITE);
ruleContentView.setPadding(dpToPx(15), dpToPx(15), dpToPx(15), dpToPx(15));
ruleContentView.setVisibility(View.GONE);
parent.addView(ruleContentView);
webView = new WebView(context);
webView.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
ruleContentView.addView(webView);
}
// 工具方法
private Button createIconButton(Context context) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
dpToPx(40),
dpToPx(40)
);
button.setLayoutParams(params);
return button;
}
private Button createActionButton(Context context, String text) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(44)
);
button.setLayoutParams(params);
button.setText(text);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
button.setTextColor(Color.parseColor("#F35248"));
button.setTypeface(button.getTypeface(), android.graphics.Typeface.BOLD);
button.setBackgroundColor(Color.parseColor("#FDE8A3")); // 临时背景色
return button;
}
private LinearLayout createCardView(Context context) {
LinearLayout card = new LinearLayout(context);
card.setBackgroundColor(Color.WHITE);
card.setPadding(dpToPx(15), dpToPx(11), dpToPx(15), dpToPx(5));
return card;
}
private TextView createTitleLabel(Context context, String text) {
TextView label = new TextView(context);
label.setText(text);
label.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
label.setTextColor(Color.parseColor("#666666"));
label.setTypeface(label.getTypeface(), android.graphics.Typeface.BOLD);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
dpToPx(26)
);
label.setLayoutParams(params);
return label;
}
private Button createTypeButton(Context context, String text) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
0, dpToPx(36), 1
);
params.setMargins(0, 0, dpToPx(10), 0);
button.setLayoutParams(params);
button.setText(text);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
button.setTextColor(Color.WHITE);
button.setTypeface(button.getTypeface(), android.graphics.Typeface.BOLD);
button.setBackgroundColor(Color.parseColor("#FF9999")); // 临时背景色
return button;
}
private LinearLayout createInputCard(Context context, String title, String hint) {
LinearLayout card = new LinearLayout(context);
card.setOrientation(LinearLayout.HORIZONTAL);
card.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams cardParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
dpToPx(48)
);
cardParams.bottomMargin = dpToPx(12);
card.setLayoutParams(cardParams);
card.setBackgroundColor(Color.WHITE);
card.setPadding(dpToPx(15), 0, dpToPx(15), 0);
TextView titleLabel = createTitleLabel(context, title);
card.addView(titleLabel);
EditText editText = new EditText(context);
LinearLayout.LayoutParams editParams = new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.MATCH_PARENT, 1
);
editParams.setMargins(dpToPx(15), 0, dpToPx(15), 0);
editText.setLayoutParams(editParams);
editText.setHint(hint);
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
editText.setTextColor(Color.parseColor("#666666"));
editText.setGravity(Gravity.END);
editText.setBackground(null);
editText.setInputType(InputType.TYPE_CLASS_TEXT);
card.addView(editText);
return card;
}
private Button createTimeButton(Context context, int minutes) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
dpToPx(49), dpToPx(36)
);
params.setMargins(0, 0, dpToPx(10), 0);
button.setLayoutParams(params);
String text = minutes == 0 ? "立刻" : minutes + "分钟";
button.setText(text);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
button.setTypeface(button.getTypeface(), android.graphics.Typeface.BOLD);
button.setBackgroundColor(Color.parseColor("#EEEEEE")); // 临时背景色
return button;
}
private Button createContentTypeButton(Context context, String text) {
Button button = new Button(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
dpToPx(63), ViewGroup.LayoutParams.MATCH_PARENT
);
button.setLayoutParams(params);
button.setText(text);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
button.setBackgroundColor(Color.TRANSPARENT);
button.setTextColor(Color.parseColor("#FFC9C7"));
return button;
}
private Button createAuthButton(Context context, String text) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
0, dpToPx(36), 1
);
params.setMargins(0, 0, dpToPx(10), 0);
button.setLayoutParams(params);
button.setText(text);
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
button.setTypeface(button.getTypeface(), android.graphics.Typeface.BOLD);
button.setBackgroundColor(Color.parseColor("#EEEEEE")); // 临时背景色
return button;
}
private int dpToPx(int dp) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dp,
getResources().getDisplayMetrics()
);
}
// Action Methods
private void nextAction() {
currentPage = 1;
moneyUnitLabel.setText(redBagContentType.equals("1") ? "金币" : "钻石");
backBtn.setVisibility(View.GONE);
helpBtn.setVisibility(View.VISIBLE);
nextBtn.setVisibility(View.GONE);
commitBtn.setVisibility(View.VISIBLE);
switchContentView(firstContentView, nextContentView);
}
private void commitAction() {
// 实现发红包逻辑
}
private void helpAction() {
isFromRule = true;
webView.loadUrl("http://www.baidu.com");
backBtn.setVisibility(View.VISIBLE);
helpBtn.setVisibility(View.GONE);
nextBtn.setVisibility(View.GONE);
commitBtn.setVisibility(View.GONE);
View currentView = currentPage == 1 ? nextContentView : firstContentView;
switchContentView(currentView, ruleContentView);
}
private void closeAction() {
hide();
}
private void backAction() {
backBtn.setVisibility(View.GONE);
helpBtn.setVisibility(View.VISIBLE);
View currentView = currentPage == 1 ? nextContentView : firstContentView;
nextBtn.setVisibility(currentPage == 0 ? View.VISIBLE : View.GONE);
commitBtn.setVisibility(currentPage == 1 ? View.VISIBLE : View.GONE);
switchContentView(ruleContentView, currentView);
isFromRule = false;
}
private void selectedRedBagTypeAction(Button sender) {
if (sender.isSelected()) return;
if (sender == normalRedBagBtn) {
pwdRedBagBtn.setSelected(false);
normalRedBagBtn.setSelected(true);
firstPwdView.setVisibility(View.GONE);
// 调整时间视图位置
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) firstTimeView.getLayoutParams();
params.topMargin = 0;
params.bottomMargin = dpToPx(12);
firstTimeView.setLayoutParams(params);
redBagType = "1";
} else {
pwdRedBagBtn.setSelected(true);
normalRedBagBtn.setSelected(false);
firstPwdView.setVisibility(View.VISIBLE);
// 调整时间视图位置
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) firstTimeView.getLayoutParams();
params.topMargin = dpToPx(60);
params.bottomMargin = dpToPx(12);
firstTimeView.setLayoutParams(params);
redBagType = "2";
}
// 更新按钮背景色
updateButtonSelection(normalRedBagBtn, sender == normalRedBagBtn);
updateButtonSelection(pwdRedBagBtn, sender == pwdRedBagBtn);
}
private void redBagContentTypeAction(Button sender) {
if (sender.isSelected()) return;
if (sender == coinRedBagBtn) {
diamondRedBagBtn.setSelected(false);
coinRedBagBtn.setSelected(true);
redBagContentType = "1";
animateSwitchBg(true);
} else {
coinRedBagBtn.setSelected(false);
diamondRedBagBtn.setSelected(true);
redBagContentType = "2";
animateSwitchBg(false);
}
// 更新按钮文字颜色
updateContentTypeButtonColor(coinRedBagBtn, coinRedBagBtn.isSelected());
updateContentTypeButtonColor(diamondRedBagBtn, diamondRedBagBtn.isSelected());
}
private void drawAuthAction(Button sender) {
if (sender == noDrawAuthBtn) {
noDrawAuthBtn.setSelected(true);
collectDrawAuthBtn.setSelected(false);
upSeatDrawAuthBtn.setSelected(false);
} else if (sender == collectDrawAuthBtn) {
collectDrawAuthBtn.setSelected(!collectDrawAuthBtn.isSelected());
if (upSeatDrawAuthBtn.isSelected() || collectDrawAuthBtn.isSelected()) {
noDrawAuthBtn.setSelected(false);
} else {
noDrawAuthBtn.setSelected(true);
}
} else if (sender == upSeatDrawAuthBtn) {
noDrawAuthBtn.setSelected(false);
upSeatDrawAuthBtn.setSelected(!upSeatDrawAuthBtn.isSelected());
if (upSeatDrawAuthBtn.isSelected() || collectDrawAuthBtn.isSelected()) {
noDrawAuthBtn.setSelected(false);
} else {
noDrawAuthBtn.setSelected(true);
}
}
// 更新按钮背景色
updateAuthButtonSelection(noDrawAuthBtn, noDrawAuthBtn.isSelected());
updateAuthButtonSelection(collectDrawAuthBtn, collectDrawAuthBtn.isSelected());
updateAuthButtonSelection(upSeatDrawAuthBtn, upSeatDrawAuthBtn.isSelected());
}
private void redBagTimeAction(Button sender) {
if (sender.isSelected()) return;
if (selectedRedBagTimeBtn != null) {
selectedRedBagTimeBtn.setSelected(false);
updateTimeButtonSelection(selectedRedBagTimeBtn, false);
}
sender.setSelected(true);
selectedRedBagTimeBtn = sender;
int minutes = 0;
try {
String text = sender.getText().toString();
if (text.equals("立刻")) {
minutes = 0;
} else {
minutes = Integer.parseInt(text.replace("分钟", ""));
}
} catch (Exception e) {
minutes = 0;
}
redBagTime = String.valueOf(minutes * 60);
updateTimeButtonSelection(sender, true);
}
// Helper Methods
private void switchContentView(View hideView, View showView) {
hideView.setVisibility(View.GONE);
showView.setVisibility(View.VISIBLE);
}
private void updateButtonSelection(Button button, boolean selected) {
button.setBackgroundColor(selected ?
Color.parseColor("#FF5555") : Color.parseColor("#FF9999"));
}
private void updateTimeButtonSelection(Button button, boolean selected) {
button.setBackgroundColor(selected ?
Color.parseColor("#FF5555") : Color.parseColor("#EEEEEE"));
}
private void updateAuthButtonSelection(Button button, boolean selected) {
button.setBackgroundColor(selected ?
Color.parseColor("#FF5555") : Color.parseColor("#EEEEEE"));
}
private void updateContentTypeButtonColor(Button button, boolean selected) {
button.setTextColor(selected ?
Color.parseColor("#D01717") : Color.parseColor("#FFC9C7"));
}
private void animateSwitchBg(boolean toLeft) {
int targetX = toLeft ? 0 : dpToPx(63);
ValueAnimator animator = ValueAnimator.ofInt(
((RelativeLayout.LayoutParams) scrollBgView.getLayoutParams()).leftMargin,
targetX
);
animator.addUpdateListener(animation -> {
int value = (int) animation.getAnimatedValue();
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) scrollBgView.getLayoutParams();
params.leftMargin = value;
scrollBgView.setLayoutParams(params);
});
animator.setDuration(300);
animator.setInterpolator(new DecelerateInterpolator());
animator.start();
}
// Public Methods
public void showInView(ViewGroup parent) {
parent.addView(this);
// 添加入场动画
mainContainer.setTranslationY(-getHeight());
mainContainer.animate()
.translationY(0)
.setDuration(300)
.setInterpolator(new DecelerateInterpolator())
.start();
}
public void hide() {
// 添加退场动画
mainContainer.animate()
.translationY(getHeight())
.setDuration(300)
.setInterpolator(new DecelerateInterpolator())
.withEndAction(() -> {
ViewGroup parent = (ViewGroup) getParent();
if (parent != null) {
parent.removeView(QXRedBagSendView.this);
}
})
.start();
}
// Getter methods
public String getRedBagType() {
return redBagType;
}
public String getRedBagContentType() {
return redBagContentType;
}
public String getRedBagTime() {
return redBagTime;
}
public String getPassword() {
return pwdTextField.getText().toString();
}
public String getMoney() {
return moneyTextField.getText().toString();
}
public String getCount() {
return countTextField.getText().toString();
}
public String getRemark() {
return remarkTextField.getText().toString();
}
public int getDrawAuth() {
if (noDrawAuthBtn.isSelected()) return 0;
if (collectDrawAuthBtn.isSelected()) return 1;
if (upSeatDrawAuthBtn.isSelected()) return 2;
return 0;
}
}

View File

@@ -167,7 +167,7 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe
countDownTime(bean.getCount_down());
setCardiac(pitBean.getCharm(), getTzbl());
setPitData(bean);
if (bean.getUser_id()!=null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()) {
if (CommonAppContext.getInstance().getOnlineMap()!=null&&CommonAppContext.getInstance().getOnlineMap().get(bean.getUser_id())!=null) {
@@ -179,6 +179,8 @@ public abstract class BaseWheatView extends ConstraintLayout implements IBaseWhe
iv_on_line.setVisibility(GONE);
}
setPitData(bean);
// if (bean.getIs_online() == 2 && bean.getUser_id()!=null && !bean.getUser_id().equals("0") && !bean.getUser_id().isEmpty()){
// iv_on_line.setVisibility(VISIBLE);
// }else {

View File

@@ -367,6 +367,9 @@ public class Constants {
public static final String POST_DELETE_RELATION_CARD = "/api/Room/delete_relation_card";//删除关系
public static final String GET_FIRST_CHARGE = "/api/Activities/first_charge_gift_permission";//首充好礼弹框权限
public static final String GET_FIRST_CHARGE_GIFT = "/api/Activities/first_charge_gift";//首充好礼列表接口
public static final String GET_NEW_CHARGE_GIFT = "/api/Activities/new_charge_gift";//新人好礼列表接口(弹框)
public static final String GET_ACTIVITIES_PERMISSION = "/api/Activities/activities_permission";//活动弹框权限
public static final String GET_DAY_DROP_GIFT = "/api/Activities/day_drop_gift";//天降好礼列表接口(弹框)
public static final String dailyTasksReceive = "/api/Dailytasks/dailyTasksReceive";//领取每日任务奖励
public static final String postRoomSwToken = "/api/Room/update_user_sw_token";//获取用户声网token
public static final String dailyTasksComplete = "/api/Dailytasks/dailyTasksComplete";//领取每日任务奖励

View File

@@ -0,0 +1,286 @@
package com.xscm.moduleutil.widget;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.blankj.utilcode.util.ScreenUtils;
import com.xscm.moduleutil.utils.BarUtils;
/**
* 这是红包入口悬浮框
*/
public class DropRedView extends LinearLayout {
private int rightMargin = 0;
private float lastX, lastY;
private int screenWidth;
private int screenHeight; // 添加屏幕高度变量
public DropRedView(Context context) {
super(context);
init();
}
public DropRedView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DropRedView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
void init() {
// 初始化屏幕尺寸
screenWidth = ScreenUtils.getScreenWidth();
screenHeight = ScreenUtils.getScreenHeight();
post(new Runnable() {
@Override
public void run() {
//设置初始位置
int sh = ScreenUtils.getScreenHeight();
int sw = ScreenUtils.getScreenWidth();
// setBackgroundResource(R.drawable.bg_home_drop_view);
int y = (int) (0.5f * sh) - getHeight();
// 确保Y坐标不会超出屏幕范围
y = Math.max(0, Math.min(y, sh - getHeight()));
// int x = sw - getWidth();//这是靠右边展示的
int x=20 ;//这里这只一小的数值,就是靠左展示的
setTranslationX(x);
setTranslationY(y);
}
});
updateSize();
mStatusBarHeight = BarUtils.getStatusBarHeight();
}
/**
* 更新屏幕尺寸信息
*/
protected void updateSize() {
ViewGroup viewGroup = (ViewGroup) getParent();
if (viewGroup != null) {
mScreenWidth = viewGroup.getWidth();
mScreenHeight = viewGroup.getHeight();
} else {
// 如果父视图为空,使用屏幕的实际宽度和高度
mScreenWidth = getResources().getDisplayMetrics().widthPixels;
mScreenHeight = getResources().getDisplayMetrics().heightPixels;
}
}
boolean starDrap = false;
float X1;
float X2;
float Y1;
float Y2;
// 记录视图初始位置
private float originalX;
private float originalY;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (starDrap) return true;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
X1 = event.getRawX();
Y1 = event.getRawY();
// 记录视图当前位置
originalX = getTranslationX();
originalY = getTranslationY();
break;
case MotionEvent.ACTION_MOVE:
X2 = event.getRawX();
Y2 = event.getRawY();
Action(X1, X2, Y1, Y2);
break;
}
return starDrap;
}
String TAG = "DropHourlView";
public boolean Action(float X1, float X2, float Y1, float Y2) {
float ComparedX = X2 - X1;//第二次的X坐标的位置减去第一次X坐标的位置代表X坐标上的变化情况
float ComparedY = Y2 - Y1;//同理
//当X坐标的变化量的绝对值大于Y坐标的变化量的绝对值以X坐标的变化情况作为判断依据
//上下左右的判断,都在一条直线上,但手指的操作不可能划直线,所有选择变化量大的方向上的量
//作为判断依据
if (Math.abs(ComparedX) > 30 || Math.abs(ComparedY) > 30) {
Log.i(TAG, "Action: 拖动");
starDrap = true;
// setBackgroundResource(R.drawable.bg_home_drop_view);
return true;
} else {
starDrap = false;
return false;
}
}
private float mOriginalRawX;
private float mOriginalRawY;
private float mOriginalX;
private float mOriginalY;
protected int mScreenWidth;
private int mScreenHeight;
private int mStatusBarHeight;
private void updateViewPosition(MotionEvent event) {
// 计算新的Y位置
float desY = mOriginalY + event.getRawY() - mOriginalRawY;
// 限制Y位置不超出屏幕边界
if (desY < mStatusBarHeight) {
desY = mStatusBarHeight;
}
if (desY > mScreenHeight - getHeight()) {
desY = mScreenHeight - getHeight();
}
// 计算新的X位置
float desX = mOriginalX + event.getRawX() - mOriginalRawX;
// 限制X位置不超出屏幕边界
if (desX < 0) {
desX = 0;
}
if (desX > mScreenWidth - getWidth()) {
desX = mScreenWidth - getWidth();
}
// 设置视图的新位置
setX(desX);
setY(desY);
}
private void changeOriginalTouchParams(MotionEvent event) {
mOriginalX = getX();//getX()相对于控件X坐标的距离
mOriginalY = getY();
mOriginalRawX = event.getRawX();//getRawX()指控件在屏幕上的X坐标
mOriginalRawY = event.getRawY();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event == null) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
changeOriginalTouchParams(event);
updateSize(); // 添加这行确保尺寸是最新的
// ... 其他现有代码 ...
break;
case MotionEvent.ACTION_MOVE:
updateViewPosition(event); // 使用更新后的带边界检查的方法
// setBackgroundResource(R.drawable.bg_home_drop_view);
// 使用屏幕绝对坐标计算新位置
// float newX = originalX + (event.getRawX() - X1);
// float newY = originalY + (event.getRawY() - Y1);
//
// // 限制X和Y坐标在屏幕范围内
// newX = Math.max(0, Math.min(newX, screenWidth - getWidth()));
// newY = Math.max(0, Math.min(newY, screenHeight - getHeight()));
//
// setTranslationX(newX);
// setTranslationY(newY);
// X2 = event.getRawX();
break;
case MotionEvent.ACTION_UP:
starDrap = false;
int sw = ScreenUtils.getScreenWidth();
Log.i(TAG, "onTouchEvent: " + sw + "," + X2);
boolean isR = getTranslationX() + getWidth() / 2 >= sw / 2;//贴边方向
// 获取当前Y坐标
float currentY = getTranslationY();
// 创建X轴和Y轴的动画
ObjectAnimator animX = ObjectAnimator.ofFloat(this, "translationX", isR ? sw - getWidth() : 0f).setDuration(200);
// Y轴保持当前位置但确保在屏幕范围内
currentY = Math.max(0, Math.min(currentY, screenHeight - getHeight()));
ObjectAnimator animY = ObjectAnimator.ofFloat(this, "translationY", currentY).setDuration(200);
animX.start();
animY.start();
break;
}
return true;
}
public void doRevealAnimation(View mPuppet, boolean flag) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int[] vLocation = new int[2];
getLocationInWindow(vLocation);
int centerX = vLocation[0] + getMeasuredWidth() / 2;
int centerY = vLocation[1] + getMeasuredHeight() / 2;
int height = ScreenUtils.getScreenHeight();
int width = ScreenUtils.getScreenWidth();
int maxRradius = (int) Math.hypot(height, width);
Log.e("hei", maxRradius + "");
if (flag) {
mPuppet.setVisibility(VISIBLE);
Animator animator = ViewAnimationUtils.createCircularReveal(mPuppet, centerX, centerY, maxRradius, 0);
animator.setDuration(600);
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mPuppet.setVisibility(View.GONE);
}
});
animator.start();
flag = false;
} else {
Animator animator = ViewAnimationUtils.createCircularReveal(mPuppet, centerX, centerY, 0, maxRradius);
animator.setDuration(1000);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
mPuppet.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
flag = true;
}
}
}
}

View File

@@ -75,6 +75,7 @@ public class RoomSingSongWheatView extends BaseWheatView {
updateSexIcon();
// updateCharmViewVisibility(bean);
updatePkState(bean);
iv_on_line.setVisibility(GONE);
}
private void handleOnState(RoomPitBean bean) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 B

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFF5DA"/>
<corners android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffba230a"/>
<corners
android:topLeftRadius="395dp"
android:topRightRadius="395dp"
android:bottomLeftRadius="395dp"
android:bottomRightRadius="395dp"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#C51A0C"/>
<corners
android:topLeftRadius="8dp"
android:topRightRadius="8dp"
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<corners
android:topLeftRadius="8dp"
android:topRightRadius="8dp"
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"/>
</shape>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="4dp"
android:color="#fffab884"/>
<gradient
android:type="linear"
android:useLevel="true"
android:startColor="#fff3624c"
android:endColor="#fff34746"
android:angle="137"/>
<corners
android:topLeftRadius="16dp"
android:topRightRadius="16dp"
android:bottomLeftRadius="16dp"
android:bottomRightRadius="16dp"/>
<item android:name="android:shadowColor">#4d000000</item>
<item android:name="android:shadowDx">0</item>
<item android:name="android:shadowDy">4</item>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#fff7c695" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 选中状态 - 使用选中时的背景图片 -->
<item android:state_selected="true" android:drawable="@drawable/red_bag_btn_bg_sel" />
<!-- 默认状态 - 使用默认背景图片 -->
<item android:drawable="@drawable/red_bag_btn_bg_nor" />
</selector>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 选中状态下的背景图片 (a图) -->
<item android:state_checked="true" android:drawable="@drawable/red_bag_btn_bg_sel" />
<!-- 未选中状态下的背景图片 (b图) -->
<item android:drawable="@drawable/red_bag_btn_bg_nor" />
</selector>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 选中状态 -->
<item android:state_checked="true">
<shape android:shape="rectangle">
<solid android:color="#FFD700"/>
<corners android:radius="@dimen/dp_20"/>
</shape>
</item>
<!-- 未选中状态 -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/transparent"/>
<corners android:radius="@dimen/dp_20"/>
</shape>
</item>
</selector>

View File

@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_transparent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/h_bj_b"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout
android:id="@+id/rl_t"
android:layout_width="@dimen/dp_276"
android:layout_height="@dimen/dp_338"
android:background="@mipmap/new_people_bj"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_98"
android:gravity="center|right"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_title1"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_20"
android:text="首次充值"
android:textSize="@dimen/sp_14"
android:textColor="#F4DF39"
/>
<TextView
android:id="@+id/tv_title2"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginEnd="@dimen/dp_23"
android:layout_marginStart="@dimen/dp_5"
android:text="首次充值"
android:textSize="@dimen/sp_12"
android:textColor="@color/black"
/>
</LinearLayout>
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_26"
android:layout_alignParentTop="true"
android:layout_marginStart="@dimen/dp_24"
android:layout_marginTop="@dimen/dp_122"
android:layout_marginEnd="@dimen/dp_30"
android:orientation="horizontal">
<RadioButton
android:id="@+id/btn_0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/btn_first_charge"
android:button="@null"
android:checked="true"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:textSize="14sp" />
<RadioButton
android:id="@+id/btn_1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:background="@drawable/btn_first_charge"
android:button="@null"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:textSize="14sp" />
<RadioButton
android:id="@+id/btn_2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:background="@drawable/btn_first_charge"
android:button="@null"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:textSize="14sp" />
<RadioButton
android:id="@+id/btn_3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:background="@mipmap/xr_ykj"
android:button="@null"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:textSize="14sp" />
</RadioGroup>
<RelativeLayout
android:id="@+id/rl_rc"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_112"
android:layout_below="@+id/rg"
android:layout_marginStart="@dimen/dp_24"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_24"
android:background="@mipmap/tk_bj">
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/rv_head"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/dp_99"-->
<!-- tools:listitem="@layout/item_gift" />-->
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner_view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_10"
app:bvp_indicator_visibility="visible"
/>
</RelativeLayout>
<TextView
android:id="@+id/tv_invite"
android:layout_width="@dimen/dp_178"
android:layout_height="@dimen/dp_42"
android:layout_below="@+id/rl_rc"
android:layout_centerInParent="true"
android:layout_marginTop="@dimen/dp_12"
android:gravity="center"
android:text="立即充值"
android:textColor="@color/color_white"
android:textSize="@dimen/sp_14" />
</RelativeLayout>
<ImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:src="@mipmap/index_close_youth"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_t" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -1,94 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cl_gift"
android:layout_width="50dp"
android:layout_height="80dp"
android:layout_marginStart="5dp"
android:background="@drawable/bg_r5_e9e9"
>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cl_gift"
android:layout_width="50dp"
android:layout_height="80dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="@dimen/dp_5"
android:background="@drawable/bg_r5_e9e9"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_iv_down_on"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingConstraints"
android:padding="5dp">
android:id="@+id/cl_iv_down_on"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingConstraints"
android:padding="5dp">
<ImageView
android:id="@+id/iv_gift_pic"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:src="@mipmap/default_image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/iv_gift_pic"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:src="@mipmap/default_image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<ImageView
android:id="@+id/iv_down_on"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="5dp"
android:layout_marginRight="12dp"
android:scaleType="fitXY"
android:src="@mipmap/room_gift_select_bg"
android:visibility="gone"
app:layout_constraintDimensionRatio="1:1.2"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
android:id="@+id/iv_down_on"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="5dp"
android:layout_marginRight="12dp"
android:scaleType="fitXY"
android:src="@mipmap/room_gift_select_bg"
android:visibility="gone"
app:layout_constraintDimensionRatio="1:1.2"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/tv_gift_name"
android:layout_width="wrap_content"
android:layout_height="10dp"
android:layout_marginTop="1dp"
android:singleLine="true"
android:text="甜蜜奶酪"
android:textColor="@color/color_FF333333"
android:textSize="7sp"
app:layout_constraintLeft_toLeftOf="@+id/iv_gift_pic"
app:layout_constraintRight_toRightOf="@+id/iv_gift_pic"
app:layout_constraintTop_toBottomOf="@+id/iv_gift_pic" />
android:id="@+id/tv_gift_name"
android:layout_width="wrap_content"
android:layout_height="10dp"
android:layout_marginTop="1dp"
android:singleLine="true"
android:text="甜蜜奶酪"
android:textColor="@color/color_FF333333"
android:textSize="7sp"
app:layout_constraintLeft_toLeftOf="@+id/iv_gift_pic"
app:layout_constraintRight_toRightOf="@+id/iv_gift_pic"
app:layout_constraintTop_toBottomOf="@+id/iv_gift_pic"/>
<TextView
android:id="@+id/tv_gift_price"
android:layout_width="wrap_content"
android:layout_height="12dp"
android:layout_marginTop="1dp"
android:text="1"
android:drawableLeft="@mipmap/jinb"
android:drawablePadding="@dimen/dp_3"
android:layout_marginBottom="3dp"
android:textColor="@color/color_FFFFBC00"
android:textSize="8sp"
app:layout_constraintLeft_toLeftOf="@+id/iv_gift_pic"
app:layout_constraintRight_toRightOf="@+id/iv_gift_pic"
app:layout_constraintTop_toBottomOf="@+id/tv_gift_name" />
android:id="@+id/tv_gift_price"
android:layout_width="wrap_content"
android:layout_height="12dp"
android:layout_marginTop="1dp"
android:text="1"
android:drawableLeft="@mipmap/jinb"
android:drawablePadding="@dimen/dp_3"
android:layout_marginBottom="3dp"
android:textColor="@color/color_FFFFBC00"
android:textSize="8sp"
app:layout_constraintLeft_toLeftOf="@+id/iv_gift_pic"
app:layout_constraintRight_toRightOf="@+id/iv_gift_pic"
app:layout_constraintTop_toBottomOf="@+id/tv_gift_name"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_number"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_9"
android:background="@mipmap/text_bj"
android:gravity="center"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="@color/black"
android:textSize="5sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="x100" />
android:id="@+id/tv_number"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_9"
android:background="@mipmap/text_bj"
android:gravity="center"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="@color/black"
android:textSize="5sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="x100"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -138,6 +138,8 @@
<color name="color_FFFFB5B5">#FFFFB5B5</color>
<color name="color_FFFFE1E1">#FFFFE1E1</color>
<color name="color_FFFA447D">#FFFA447D</color>
<color name="color_FFBA230A">#FFBA230A</color>
<color name="color_FFFDE8A3">#FFFDE8A3</color>
<color name="color_FF53D7FF">#FF53D7FF</color>
<color name="color_FF43D3FF">#FF43D3FF</color>
<color name="color_FFFFC1C1">#FFFFC1C1</color>