1:添加签约房的按钮

2:我的家族和的身价页面完成
3:个性装扮降身卡完成
This commit is contained in:
2025-11-26 15:52:46 +08:00
parent 1753d9a98d
commit 9887185133
204 changed files with 1873 additions and 245 deletions

View File

@@ -1,5 +1,6 @@
package com.xscm.modulemain.activity.room.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,6 +10,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.blankj.utilcode.util.ActivityUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import com.xscm.modulemain.R;
@@ -17,15 +19,23 @@ import com.xscm.modulemain.activity.room.contacts.RequestSongContacts;
import com.xscm.modulemain.activity.room.presenter.RequestSongPresenter;
import com.xscm.modulemain.activity.room.adapter.SongAdapter;
import com.xscm.modulemain.activity.room.adapter.WheatPositionAdapter;
import com.xscm.modulemain.activity.user.activity.HeartCpActivity;
import com.xscm.modulemain.databinding.FragmentSongRequestBinding;
import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.RoomGiftData;
import com.xscm.moduleutil.bean.SingerSongCount;
import com.xscm.moduleutil.bean.SongPlaylist;
import com.xscm.moduleutil.bean.room.RoomPitBean;
import com.xscm.moduleutil.dialog.ConfirmDialog;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.SpUtil;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
/**
* 点歌页面Fragment
*/
@@ -128,16 +138,37 @@ public class SongRequestFragment extends BaseMvpFragment<RequestSongPresenter, F
@Override
public void onSongClick(SongPlaylist.SongPlaylistBean song, int position) {
MvpPre.singerSong(song.getId() + "", roomId);
queren1(song);
}
});
}
// TODO: 2025/11/25 点歌提示框
private void queren1(SongPlaylist.SongPlaylistBean song) {
// 创建并显示确认对话框
new ConfirmDialog(ActivityUtils.getTopActivity(),
"温馨提示",
"您是否确认点歌<"+song.getSong_name()+">\n 演唱者:"+song.getSinger_nickname()+"\n 礼物价值:"+Integer.valueOf(song.getGift_price())*Integer.valueOf(song.getGift_num())+"金币",
"确认",
"取消",
v -> {
MvpPre.singerSong(song.getId() + "", roomId);
},
v -> {
// 点击“取消”按钮时什么都不做
}, false,0).show();
}
private void updateSongList(int wheatPosition) {
// 根据选中的麦位更新歌曲列表
// 可以在这里调用接口获取对应麦位的歌曲列表
MvpPre.getSong(wheatPosition + "", "", "1", "10");
if (wheatPosition==0){
MvpPre.getSong( "", roomId, "1", "10");
}else {
MvpPre.getSong(wheatPosition + "", "", "1", "10");
}
}

View File

@@ -31,76 +31,9 @@ import java.util.List;
* @description: 个性装扮
*/
public class PersonalityActivity extends BaseMvpActivity<PersonalityPresenter, ActivityPersonalityBinding> implements PersonalityConacts.View {
private List<String> titleList = new ArrayList();
private List<Fragment> mFragments = new ArrayList();
private MyPagerAdapter myAdapter;
@Override
protected void initData() {
// titleList.add("头像框");
// titleList.add("座驾");
// titleList.add("气泡");
// titleList.add("个人靓号");
// titleList.add("房间靓号");
// titleList.add("工会靓号");
//
// mFragments.add(ZhuangBanShangChengFragment.newInstance(1));
// mFragments.add(ZhuangBanShangChengFragment.newInstance(2));
// mFragments.add(ZhuangBanShangChengFragment.newInstance(3));
// mFragments.add(ZhuangBanShangChengFragment.newInstance(4));
// mFragments.add(ZhuangBanShangChengFragment.newInstance(5));
// mFragments.add(ZhuangBanShangChengFragment.newInstance(6));
// myAdapter = new MyPagerAdapter(getSupportFragmentManager(), mFragments, titleList);
// mBinding.viewPager.setAdapter(myAdapter);
// mBinding.viewPager.setOffscreenPageLimit(mFragments.size());
// mBinding.tabLayout.setupWithViewPager(mBinding.viewPager);
// setCustomViews();
// mBinding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
// @Override
// public void onTabSelected(TabLayout.Tab tab) {
// updateTabView(tab, true);
// }
//
// @Override
// public void onTabUnselected(TabLayout.Tab tab) {
// updateTabView(tab, false);
// }
//
// @Override
// public void onTabReselected(TabLayout.Tab tab) {
// // 可选实现
// }
//
// private void updateTabView(TabLayout.Tab tab, boolean isSelected) {
// if (tab.getCustomView() == null) return;
//
// TextView text = tab.getCustomView().findViewById(R.id.tv_zbtab);
// ImageView vView = tab.getCustomView().findViewById(R.id.v_view);
//
// if (text != null) {
// if (isSelected) {
// text.setTextColor(Color.parseColor("#333333"));
// text.setTextSize(16f);
// text.setTypeface(Typeface.DEFAULT_BOLD);
// } else {
// text.setTextColor(Color.parseColor("#5B5B5B"));
// text.setTextSize(14f);
// text.setTypeface(Typeface.DEFAULT);
// }
// }
//
// if (vView != null) {
// vView.setVisibility(isSelected ? View.VISIBLE : View.GONE);
// }
// }
// });
}
@Override
@@ -135,44 +68,10 @@ public class PersonalityActivity extends BaseMvpActivity<PersonalityPresenter, A
return R.layout.activity_personality;
}
// private void setCustomViews() {
// int mSelectedTabPosition = mBinding.tabLayout.getSelectedTabPosition();
// for (int i = 0; i < titleList.size(); i++) {
// Objects.requireNonNull(mBinding.tabLayout.getTabAt(i)).setCustomView(getTabView(i, mSelectedTabPosition));
// }
// }
// private View getTabView(int index, int mSelectedTabPosition) {
// // 自定义View布局
// View view = LayoutInflater.from(this).inflate(R.layout.item_tablayout_headerzb, null);
// TextView title = view.findViewById(R.id.tv_zbtab);
// ImageView v_view = view.findViewById(R.id.v_view);
// title.setText(titleList.get(index));
// title.setSelected(index == mSelectedTabPosition);
//// v_view.setSelected(index == mSelectedTabPosition);
// v_view.setVisibility(index == mSelectedTabPosition ? View.VISIBLE : View.GONE);
// if (index == mSelectedTabPosition) {
// title.setTextColor(Color.parseColor("#333333"));
// title.setTextSize(16f);
// title.setTypeface(Typeface.DEFAULT_BOLD);
// // title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17f);
// // title.setTypeface(Typeface.DEFAULT_BOLD);
// } else {
// title.setTextColor(Color.parseColor("#5B5B5B"));
// title.setTextSize(14f);
// // title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15f);
// // title.setTypeface(Typeface.DEFAULT);
// }
//
// return view;
// }
@Override
public void getPersonaltyList(List<PersonaltyBean> personaltyBean) {
mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), personaltyBean));
// mBinding.viewPager.setOffscreenPageLimit(mFragments.size());
// mBinding.tabLayout.setupWithViewPager(mBinding.viewPager);
// setCustomViews();
mBinding.slidingTabLayout.setViewPager(mBinding.viewPager);
mBinding.slidingTabLayout.setCurrentTab(0);
@@ -188,6 +87,11 @@ public class PersonalityActivity extends BaseMvpActivity<PersonalityPresenter, A
public void onPageSelected(int position) {
// 当页面切换时,控制 tv_bb_qs 按钮的显示
refreshCurrentGiftFragment(personaltyBean.get(position).getId(),position);
if (personaltyBean.get(position).getId().equals("12")){
mBinding.cl2.setVisibility(View.GONE);
}else {
mBinding.cl2.setVisibility(View.VISIBLE);
}
}
@Override

View File

@@ -0,0 +1,55 @@
package com.xscm.modulemain.activity.user.activity
import android.util.Log
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts
import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter
import com.xscm.modulemain.databinding.ActivityTotalRevenueBinding
import com.xscm.moduleutil.widget.DoubleTimePickerBottomSheet
import com.xscm.moduleutil.widget.DoubleTimePickerBottomSheet.OnTimeRangeSelectedListener
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
/**
* @Author qx
* @Time 2025/11/26 10:56
* @Description 家族总收益
*/
class TotalRevenueActivity : BaseMvpActivity<UserFamilyPresenter, ActivityTotalRevenueBinding>(),
UserFamilyConacts.View {
var page = 1
var type = "1"
var revenueType = "1"
override fun bindPresenter(): UserFamilyPresenter? {
return UserFamilyPresenter(this, this)
}
override fun initData() {
mBinding.topBar.tvTitle.text = "总收益"
mBinding.rl3.setOnClickListener({ v ->
val dialog = DoubleTimePickerBottomSheet()
dialog.setOnTimeRangeSelectedListener(OnTimeRangeSelectedListener { startDate: Date?, endDate: Date? ->
// 处理选择的时间范围
val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
Log.d("SelectedTime", "开始时间:" + sdf.format(startDate))
mBinding.tv2.setText(sdf.format(startDate))
Log.d("SelectedTime", "结束时间:" + sdf.format(endDate))
mBinding.tv22.setText(sdf.format(endDate))
page = 1
})
val fragmentManager = supportFragmentManager
dialog.show(fragmentManager,"DoubleTimePickerBottomSheet")
})
}
override fun getLayoutId(): Int {
return R.layout.activity_total_revenue
}
}

View File

@@ -0,0 +1,110 @@
package com.xscm.modulemain.activity.user.activity
import android.graphics.Color
import android.view.LayoutInflater
import android.widget.ImageView
import android.widget.TextView
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts
import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter
import com.xscm.modulemain.adapter.FamilyPagerAdapter
import com.xscm.modulemain.databinding.ActivityUserFamilyBinding
/**
* @Author qx
* @Time 2025/11/25 17:11
* @Description 我的家族
*/
class UserFamilyActivity : BaseMvpActivity<UserFamilyPresenter, ActivityUserFamilyBinding>(),
UserFamilyConacts.View {
private lateinit var mAdapter: FamilyPagerAdapter
override fun bindPresenter(): UserFamilyPresenter? {
return UserFamilyPresenter(this,this)
}
override fun doDone() {
super.doDone()
}
override fun initView() {
super.initView()
}
override fun initData() {
mBinding.topBar.setTitle("家族")
mBinding.topBar.setColor(getResources().getColor(R.color.white))
setupViewPager()
setupTabLayout()
}
override fun getLayoutId(): Int {
return R.layout.activity_user_family
}
private fun setupViewPager() {
mAdapter = FamilyPagerAdapter(this)
mBinding.viewPager.adapter = mAdapter
}
private fun setupTabLayout() {
// 设置TabLayout的内部padding为0确保tab与边框贴合
TabLayoutMediator(mBinding.tabLayout, mBinding.viewPager) { tab, position ->
// 创建自定义Tab视图
val customView = LayoutInflater.from(this).inflate(R.layout.custom_tab_family, null)
val tabTitle = customView.findViewById<TextView>(R.id.tab_title)
when (position) {
0 -> {
tabTitle.text = "我的家族"
}
1 -> {
tabTitle.text = "我加入的家族"
}
}
// 设置Tab的初始状态
if (position == 0) {
tabTitle.setBackgroundResource(R.mipmap.user_tab_bj)
tabTitle.setTextColor(Color.BLACK)
} else {
tabTitle.setBackgroundResource(0)
tabTitle.setTextColor(Color.WHITE)
}
tab.customView = customView
}.attach()
// 设置Tab选中监听
mBinding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
val customView = tab.customView
if (customView != null) {
val tabTitle = customView.findViewById<TextView>(R.id.tab_title)
tabTitle.setTextColor(Color.BLACK)
tabTitle.setBackgroundResource(R.mipmap.user_tab_bj)
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
val customView = tab.customView
if (customView != null) {
val tabTitle = customView.findViewById<TextView>(R.id.tab_title)
tabTitle.setTextColor(Color.WHITE)
tabTitle.setBackgroundResource(0)
}
}
override fun onTabReselected(tab: TabLayout.Tab) {
// 可以在这里处理重复点击Tab的事件
}
})
}
}

View File

@@ -109,6 +109,9 @@ class BosomFriendFragment : BaseMvpFragment<UserHomepagePresenter?, FragmentBoso
override fun initView() {
if (type == 1) {
mBinding.root.setBackgroundResource(R.mipmap.bj_intimate)
mBinding.imIntimate.setPadding(0, 270, 0, 0)
}else{
mBinding.imIntimate.setPadding(0, 80, 0, 0)
}
mBinding.rvMyRelationship.layoutManager =

View File

@@ -0,0 +1,20 @@
package com.xscm.modulemain.activity.user.conacts
import android.app.Activity
import com.xscm.moduleutil.activity.IPresenter
import com.xscm.moduleutil.activity.IView
/**
* 项目名称:羽声语音
* 时间2025/11/25 17:01
* 用途:
*/
class UserFamilyConacts {
interface View : IView<Activity>{
}
interface IPre : IPresenter {
}
}

View File

@@ -0,0 +1,39 @@
package com.xscm.modulemain.activity.user.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.xscm.modulemain.databinding.FragmentJoinedFamilyBinding
/**
* @Author qx
* @Time 2025/11/25 17:20
* @Description 我加入的家族Fragment
*/
class JoinedFamilyFragment : Fragment() {
private var _binding: FragmentJoinedFamilyBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentJoinedFamilyBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
fun newInstance(): JoinedFamilyFragment {
return JoinedFamilyFragment()
}
}
}

View File

@@ -0,0 +1,86 @@
package com.xscm.modulemain.activity.user.fragment
import android.content.Intent
import android.view.View
import com.blankj.utilcode.util.ActivityUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.user.activity.HeartCpActivity
import com.xscm.modulemain.activity.user.activity.TotalRevenueActivity
import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts
import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter
import com.xscm.modulemain.databinding.FragmentMyFamilyBinding
import com.xscm.moduleutil.base.BaseMvpFragment
import com.xscm.moduleutil.dialog.ConfirmDialog
import com.xscm.moduleutil.widget.CommonEmptyView
/**
* @Author qx
* @Time 2025/11/25 17:20
* @Description 我的家族Fragment
*/
class MyFamilyFragment : BaseMvpFragment<UserFamilyPresenter, FragmentMyFamilyBinding>(), UserFamilyConacts.View {
override fun bindPresenter(): UserFamilyPresenter? {
return UserFamilyPresenter(this, activity!!)
}
override fun onDestroyView() {
super.onDestroyView()
}
override fun initData() {
}
override fun initView() {
mBinding.tvZsyNum2.setOnClickListener {
val intent= Intent(activity, TotalRevenueActivity::class.java)
startActivity(intent)
}
val commonEmptyView = CommonEmptyView(getContext()!!)
commonEmptyView.setImg(R.mipmap.ic_empty)
commonEmptyView.setTextColor(getResources().getColor(com.xscm.moduleutil.R.color.color_FFBDBDBC))
// manageAdapter.bindToRecyclerView(mBinding.recycleView)
// manageAdapter.setEmptyView(commonEmptyView)
}
override fun getLayoutId(): Int {
return R.layout.fragment_my_family
}
companion object {
fun newInstance(): MyFamilyFragment {
return MyFamilyFragment()
}
}
private fun queren1(
type: Int,
content: String?,
giftid: String?,
userId: String,
roomId: String?
) {
// 创建并显示确认对话框
ConfirmDialog(
ActivityUtils.getTopActivity(),
"续约提示",
content,
if (type == 1) "确认免费续约" else "确认续约",
"取消",
View.OnClickListener { v: View? ->
if (type == 1) {
} else {
val userids = userId.toInt()
val intent = Intent(ActivityUtils.getTopActivity(), HeartCpActivity::class.java)
intent.putExtra("userId", userids)
startActivity(intent)
}
},
View.OnClickListener { v: View? -> }, false, 0
).show()
}
}

View File

@@ -26,6 +26,7 @@ import com.xscm.modulemain.activity.user.activity.GiftWallActivity;
import com.xscm.modulemain.activity.user.activity.NobleTitleActivity;
import com.xscm.modulemain.activity.user.activity.RechargeActivity;
import com.xscm.modulemain.activity.user.activity.SingerVerificationActivity;
import com.xscm.modulemain.activity.user.activity.UserFamilyActivity;
import com.xscm.modulemain.activity.user.activity.UserPlaylistActivity;
import com.xscm.modulemain.databinding.FragmentVocalRangeBinding;
import com.xscm.modulemain.activity.user.activity.BlacklistActivity;
@@ -40,6 +41,7 @@ import com.xscm.modulemain.activity.user.activity.UserHomepageActivity;
import com.xscm.modulemain.activity.user.conacts.MeConacts;
import com.xscm.modulemain.activity.user.presenter.MePresenter;
import com.xscm.modulemain.activity.WebViewActivity;
import com.xscm.modulemain.dialog.UserNetWorthDialog;
import com.xscm.moduleutil.base.WebUrlConstants;
import com.xscm.moduleutil.widget.ShineTextView;
import com.xscm.moduleutil.base.BaseMvpFragment;
@@ -124,6 +126,8 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
mBinding.llSinger.setOnClickListener(this::onClick);
mBinding.llPlaylist.setOnClickListener(this::onClick);
mBinding.llMeZy.setOnClickListener(this::onClick);
mBinding.llMyNetWorth.setOnClickListener(this::onClick);
mBinding.llJz.setOnClickListener(this::onClick);
mBinding.banner.loadImage(new XBanner.XBannerAdapter() {
@Override
@@ -214,14 +218,7 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
Intent intent = new Intent(getContext(), UserHomepageActivity.class);
intent.putExtra("userId", SpUtil.getUserId() + "");
startActivity(intent);
}
// else if (id == R.id.me_my_lv) {
// ARouter.getInstance().build(ARouteConstants.ME_GRADEACTIVITY).withString("from", "我的界面").withInt("type", 1).navigation();
// } else if (id == R.id.tv_my_sc) {
// //装扮商城
// ARouter.getInstance().build(ARouteConstants.ME_SHOP).withString("from", "我的界面").navigation();
// }
else if (id == R.id.me_dress_up){//个性装扮
} else if (id == R.id.me_dress_up){//个性装扮
startActivity(new Intent(getContext(), PersonalityActivity.class));
}
else if (id == R.id.tv_my_bb) {
@@ -263,25 +260,29 @@ public class VocalRangeFragment extends BaseMvpFragment<MePresenter, FragmentVoc
req.url = "https://work.weixin.qq.com/kfid/kfcb3d23a59c188a0e7"; // 客服URL
api.sendReq(req);
} else if (id == R.id.ll_gift_wall) {//我的页面的礼物墙
Intent intent=new Intent(getContext(), GiftWallActivity.class);
intent.putExtra("userId",userInfo.getUser_id());
startActivity(intent);
} else if (id == R.id.cl_noble_title) {//爵位展示页面
startActivity(new Intent(getContext(), NobleTitleActivity.class));
} else if (id == R.id.ll_singer) {//歌手认证
Intent intent = new Intent(getContext(), SingerVerificationActivity.class);
intent.putExtra("isSinger", userInfo.getSinger_status());
startActivity(intent);
} else if (id == R.id.ll_playlist) {//我的歌单
Intent intent = new Intent(getContext(), UserPlaylistActivity.class);
startActivity(intent);
}else if (id == R.id.ll_me_zy) {
}else if (id == R.id.ll_me_zy) {//挚友
Intent intent=new Intent(getContext(), BosomFriendActivity.class);
startActivity(intent);
}else if (id == R.id.ll_my_net_worth) {//身价
UserNetWorthDialog dialog = new UserNetWorthDialog(getContext());
dialog.show();
}else if (id == R.id.ll_jz) {//我的家族
Intent intent=new Intent(getContext(), UserFamilyActivity.class);
startActivity(intent);
}
}
private void copyComment(String content) {

View File

@@ -33,7 +33,7 @@ public class ZhuangBanShangChengAdapter extends BaseQuickAdapter<ZhuangBanShangC
ThemeableDrawableUtils.setThemeableRoundedBackground( tv_integral, ColorManager.getInstance().getPrimaryColorInt(), corners);
tv_integral.setTextColor(ColorManager.getInstance().getButtonColorInt());
helper.setText(R.id.integral, item.getRemaining_day()+"")
helper.setText(R.id.integral, !item.getType().equals("12")?item.getRemaining_day()+"" : "x"+item.getNum())
.setText(R.id.tv_name_period, item.getTitle());
// .setText(R.id.tv_time, "(有效期${item.period}天)")
if (item.isIs_select()) {

View File

@@ -2,22 +2,33 @@ package com.xscm.modulemain.activity.user.fragment.zhuangb;
import static android.view.View.GONE;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.recyclerview.widget.GridLayoutManager;
import com.blankj.utilcode.util.ActivityUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.activity.HeartCpActivity;
import com.xscm.modulemain.databinding.ZhuangbanRecyclerviewNorefBinding;
import com.hjq.toast.ToastUtils;
import com.makeramen.roundedimageview.RoundedImageView;
import com.tencent.qgame.animplayer.AnimView;
import com.xscm.modulemain.activity.user.fragment.MyRoomListFragment;
import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.RoomGiftData;
import com.xscm.moduleutil.bean.zhuangb.ZhuangBanShangChengBean;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.dialog.ConfirmDialog;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.SpUtil;
@@ -27,6 +38,8 @@ import com.xscm.moduleutil.widget.GiftAnimView;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangChengPresenter, ZhuangbanRecyclerviewNorefBinding> implements ZhuangBanShangChengConactos.View {
private int type;
@@ -40,6 +53,7 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
AnimView item_animview;
RoundedImageView image_user;
private int tabIndex;
private String zbName, zbPrice;//这是降身卡名称、降身卡可能降低的金额
@Override
protected ZhuangBanShangChengPresenter bindPresenter() {
@@ -60,7 +74,7 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
type = arguments.getInt("type", MyRoomListFragment.TYPE_CREATE);
}
public void loadDataIfNeeded(int type,int tabIndex) {
public void loadDataIfNeeded(int type, int tabIndex) {
if (MvpPre == null) {
MvpPre = bindPresenter();
}
@@ -68,25 +82,18 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
this.tabIndex = tabIndex;
MvpPre.getDecorateList(type + "", tabIndex);
}
@Override
protected void initData() {
MvpPre.getDecorateList(type + "", tabIndex);
if (type == 12) {
mBinding.zhuangbanBuy.setText("确认使用");
} else {
mBinding.zhuangbanBuy.setText("确认装扮");
}
// //这里根据传递的type进行数据查询
// zhuangBanShangChengBeanList=new ArrayList<>();
// for (int i = 0; i < 10; i++) {
// ZhuangBanShangChengBean zhuangBanShangChengBean=new ZhuangBanShangChengBean();
// zhuangBanShangChengBean.setTitle("标题"+i);
// zhuangBanShangChengBean.setIntegral("积分"+i);
// zhuangBanShangChengBean.setPeriod(i);
// zhuangBanShangChengBean.setType("类型"+i);
// zhuangBanShangChengBean.setBase_image("");
// zhuangBanShangChengBeanList.add(zhuangBanShangChengBean);
// }
image_user = (RoundedImageView) getActivity().findViewById(R.id.iv_user);
imageBg = (AvatarFrameView) getActivity().findViewById(R.id.image_headPortrait);
// imageBg2 = (GiftAnimView) getActivity().findViewById(R.id.image_headPortrait2);
@@ -105,21 +112,6 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
ImageUtils.loadHeadCC(SpUtil.getUserInfo().getAvatar(), image_user);
}
}
// if (type == 1) {
//// image_user.setVisibility(View.VISIBLE);
// imageBg.setVisibility(View.VISIBLE);
// imageBg2.setVisibility(View.GONE);
// } else if (type == 2){
//// image_user.setVisibility(View.GONE);
// imageBg.setVisibility(View.GONE);
// imageBg2.setVisibility(View.VISIBLE);
// }else {
//// image_user.setVisibility(View.GONE);
// imageBg.setVisibility(View.GONE);
// imageBg2.setVisibility(View.GONE);
// }
adapter = new ZhuangBanShangChengAdapter();
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 3);
mBinding.recyclerView.setLayoutManager(gridLayoutManager);
@@ -129,52 +121,26 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
List<ZhuangBanShangChengBean> list = (List<ZhuangBanShangChengBean>) adapter1.getData();
// 清除之前的选择状态
clearPreviousSelection(list);
// // 设置当前选择
// ZhuangBanShangChengBean selectedBean = list.get(position);
// selectedBean.setIs_select(true);
// pSelect = position;
// did = selectedBean.getUdid();
//
// // 更新UI显示
// if (position == 0) { // "无"选项
// mBinding.ll.setVisibility(View.GONE);
// clearDecorations();
// } else {
// mBinding.ll.setVisibility(View.VISIBLE);
//
// if ("svga".equalsIgnoreCase(getFileExtension(selectedBean.getPlay_image()))) {
// imageBg.stopAll();
// imageBg.setSource(selectedBean.getPlay_image(), 2);
// } else if ("mp4".equalsIgnoreCase(getFileExtension(selectedBean.getPlay_image()))) {
// imageBg.stopAll();
// imageBg.setSource(selectedBean.getPlay_image(), 2);
// }
// }
if (pSelect != -1 && pSelect != position) {
list.get(pSelect).setIs_select(false);
list.get(position).setIs_select(true);
pSelect = position;
did = list.get(position).getUdid();
mBinding.ll.setVisibility(View.VISIBLE);
if (list.get( position)!=null && list.get(position).getType()!=null && list.get(position).getPlay_image()!=null) {
// if ("svga".equalsIgnoreCase(getFileExtension(list.get(position).getPlay_image()))) {
mBinding.ll.setVisibility(View.VISIBLE);
if (list.get(position) != null && list.get(position).getType() != null && list.get(position).getPlay_image() != null) {
if (list.get(position).getType().equals("1")) {
imageBg2.setVisibility(View.GONE);
imageBg.stopAll();
imageBg.setSource(list.get(position).getPlay_image(), 2);
} else if (list.get(position).getType().equals("2")) {
// imageBg2.setSource(list.get(position).getPlay_image(), 2);
imageBg2.setVisibility(View.VISIBLE);
imageBg2.previewEffectWith(list.get(position).getPlay_image());
}
}
// } else if ("mp4".equalsIgnoreCase(getFileExtension(list.get(position).getPlay_image()))) {
//// imageBg.playMP4(Uri.parse(list.get(position).getPlay_image()));
// imageBg.stopAll();
// imageBg.setSource(list.get(position).getPlay_image(),2);
// }
} else if (pSelect != -1 && pSelect == position) {
list.get(position).setIs_select(false);
pSelect = -1;
@@ -185,7 +151,7 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
pSelect = position;
mBinding.ll.setVisibility(View.VISIBLE);
if (list.get( position)!=null && list.get(position).getType()!=null && list.get(position).getPlay_image()!=null) {
if (list.get(position) != null && list.get(position).getType() != null && list.get(position).getPlay_image() != null) {
if (list.get(position).getType().equals("1")) {
imageBg2.setVisibility(View.GONE);
@@ -193,32 +159,15 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
imageBg.setSource(list.get(position).getPlay_image(), 2);
} else if (list.get(position).getType().equals("2")) {
imageBg2.setVisibility(View.VISIBLE);
// imageBg2.stopAll();
// imageBg2.setSource(list.get(position).getPlay_image(), 2);
imageBg2.previewEffectWith(list.get(position).getPlay_image());
}
}
// loadImage(getContext(),imageBg, list.get(position).getPlay_image());
// ImageUtils.loadDecorationAvatar(list.get(position).getPlay_image(), imageBg);
// imageBg.load(list.get(position).getPlay_image());
// if ("svga".equalsIgnoreCase(getFileExtension(list.get(position).getPlay_image()))) {
// imageBg.stopAll();
// imageBg.setSource(list.get(position).getPlay_image(), 2);
//// imageBg.playSVGA(list.get(position).getPlay_image());
// } else if ("mp4".equalsIgnoreCase(getFileExtension(list.get(position).getPlay_image()))) {
// imageBg.stopAll();
// imageBg.setSource(list.get(position).getPlay_image(), 2);
//// imageBg.playMP4(Uri.parse(list.get(position).getPlay_image()));
// }
}
zbName = list.get(position).getTitle();
zbPrice = list.get(position).getExt_value();
adapter1.setNewData(list);
adapter1.notifyDataSetChanged();
});
adapter.setNewData(zhuangBanShangChengBeanList);
}
/**
@@ -259,13 +208,61 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
if (did == null || did.isEmpty()) {
MvpPre.cancelUserDecorate(type + "");
} else {
MvpPre.setUserDecorate(did);
if (type == 12) {
queren(zbName, zbPrice);
} else {
MvpPre.setUserDecorate(did);
}
}
});
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.zhuangbanBuy, ColorManager.getInstance().getPrimaryColorInt(), 53);
mBinding.zhuangbanBuy.setTextColor(ColorManager.getInstance().getButtonColorInt());
}
private void queren(String name, String price) {
// 创建并显示确认对话框
new ConfirmDialog(ActivityUtils.getTopActivity(),
"温馨提示",
getFormattedText(name,price),
"确认",
"取消",
v -> {
MvpPre.setUserDecorate(did);
},
v -> {
// 点击“取消”按钮时什么都不做
}, false, 0).show();
}
public String getFormattedText(String name, String price) {
// 1. 构建完整的字符串
String fullText = "亲爱的羽声用户,您好~ \n 您是否确认使用" + name + ",本次使用后,您的实时身价将会降低" + price + "%身价。";
// 2. 创建 SpannableString 实例
SpannableString spannableString = new SpannableString(fullText);
// 3. 找到需要变色的文本的起始和结束位置
int nameStart = fullText.indexOf(name);
int nameEnd = nameStart + name.length();
int priceStart = fullText.indexOf(price);
int priceEnd = priceStart + price.length();
// 4. 创建颜色 Span
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); // 使用 Color.RED 或者你自己的颜色资源
// 5. 将 Span 应用到指定范围
if (nameStart != -1) {
spannableString.setSpan(colorSpan, nameStart, nameEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (priceStart != -1) {
spannableString.setSpan(colorSpan, priceStart, priceEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannableString.toString();
}
@Override
protected int getLayoutId() {
return R.layout.zhuangban_recyclerview_noref;
@@ -276,13 +273,15 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
if (adapter == null) {
adapter = new ZhuangBanShangChengAdapter();
}
if (zhuangBanShangChengBeans==null){
zhuangBanShangChengBeans=new ArrayList<>();
if (zhuangBanShangChengBeans == null) {
zhuangBanShangChengBeans = new ArrayList<>();
}
if (type != 12) {
ZhuangBanShangChengBean zhuangBanShangChengBean = new ZhuangBanShangChengBean();
zhuangBanShangChengBean.setTitle("");
zhuangBanShangChengBean.setBase_image("");
zhuangBanShangChengBeans.add(0, zhuangBanShangChengBean);
}
ZhuangBanShangChengBean zhuangBanShangChengBean = new ZhuangBanShangChengBean();
zhuangBanShangChengBean.setTitle("");
zhuangBanShangChengBean.setBase_image("");
zhuangBanShangChengBeans.add(0, zhuangBanShangChengBean);
adapter.setNewData(zhuangBanShangChengBeans);
this.tabIndex = tabIndex;
@@ -291,6 +290,7 @@ public class ZhuangBanShangChengFragment extends BaseMvpFragment<ZhuangBanShangC
@Override
public void setUserDecorate() {
Toast.makeText(getSelfActivity(), "设置成功", Toast.LENGTH_SHORT).show();
MvpPre.getDecorateList(type + "", tabIndex);
}
@Override

View File

@@ -0,0 +1,14 @@
package com.xscm.modulemain.activity.user.presenter
import android.content.Context
import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts
import com.xscm.moduleutil.presenter.BasePresenter
/**
* 项目名称:羽声语音
* 时间2025/11/25 17:01
* 用途:
*/
class UserFamilyPresenter (view: UserFamilyConacts.View,context: Context) : BasePresenter<UserFamilyConacts.View>(view,context), UserFamilyConacts.IPre{
}

View File

@@ -0,0 +1,27 @@
package com.xscm.modulemain.adapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.xscm.modulemain.activity.user.fragment.JoinedFamilyFragment
import com.xscm.modulemain.activity.user.fragment.MyFamilyFragment
/**
* @Author qx
* @Time 2025/11/25 17:25
* @Description 家族页面ViewPager2适配器
*/
class FamilyPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
override fun getItemCount(): Int {
return 2
}
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> MyFamilyFragment.newInstance()
1 -> JoinedFamilyFragment.newInstance()
else -> MyFamilyFragment.newInstance()
}
}
}

View File

@@ -59,6 +59,8 @@ public class RoomSettingAdapter extends BaseMultiItemQuickAdapter<RoomSettingBea
return com.xscm.moduleutil.R.mipmap.huyu;
case RoomSettingBean.QXRoomSettingTypeRoomTypeLianG:
return com.xscm.moduleutil.R.mipmap.icon_liang;
case RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNONTRACT :
return com.xscm.moduleutil.R.mipmap.icon_sign_contract;
// 常用工具
case RoomSettingBean.QXRoomSettingTypeRoomSubsidy:
return com.xscm.moduleutil.R.mipmap.ic_subsidy;

View File

@@ -21,7 +21,11 @@ import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import io.reactivex.disposables.Disposable
import retrofit2.Retrofit
/**
* @Author
* @Time 2025/11/25 14:33
* @Description 表情类型列表
*/
class EmotionPickerDialog(context: Context) : Dialog(context, com.xscm.moduleutil.R.style.BaseDialogStyleH) {
private lateinit var binding: DialogEmotionPickerBinding

View File

@@ -143,6 +143,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
dataList.add(new RoomSettingBean("点唱", "jiao_y", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy, read, isSelected, false, false));// 添加的新的房间类型 ,交友 ,是原来的男神女神类型
dataList.add(new RoomSettingBean("互娱", "ic_jiaoy", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU, read, isSelected, false, false)); //原交友,更改互娱 2025年9月19日11:18:01
dataList.add(new RoomSettingBean("练歌房", "ic_liang", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeLianG, read, isSelected, false, false)); //练歌房,原点歌房,同意的时候,走同意点歌的逻辑
dataList.add(new RoomSettingBean("签约", "sing_contract", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNONTRACT, read, isSelected, false, false)); //签约房
dataList.add(new RoomSettingBean("常用工具", null, null, null, -1, read, isSelected, false, false));
@@ -283,7 +284,10 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
queren("7");
} else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG){
queren("-1");
}else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) {
}else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNONTRACT){
queren("10");
}
else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) {
if (roomInfoResp != null) {
ARouter.getInstance().build(ARouteConstants.CREATED_ROOM).withSerializable("roomInfoResp", roomInfoResp).navigation();
} else {
@@ -335,7 +339,22 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
// 创建并显示确认对话框
new ConfirmDialog(getActivity(),
"提示",
"即将修改房间类型为" + (type.equals("1") ? "交友" : (type.equals("2") ? "拍卖" : (type.equals("3") ? "男神" : (type.equals("4") ? "女神" : (type.equals("7") ? "互娱" : (type.equals("9") ? "点唱" :(type.equals("-1") ? "练歌房" : ""))))))),
"即将修改房间类型为" +
(type.equals("1") ? "交友" :
(type.equals("2") ? "拍卖" :
(type.equals("3") ? "男神" :
(type.equals("4") ? "女神" :
(type.equals("7") ? "互娱" :
(type.equals("9") ? "点唱" :
(type.equals("-1") ? "练歌房" :
(type.equals("10") ? "签约房" : "")
)
)
)
)
)
)
),
"确认",
"取消",
v -> {
@@ -383,7 +402,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
if (type == RoomSettingBean.QXRoomSettingTypeRoomTypeSing || type == RoomSettingBean.QXRoomSettingTypeRoomTypeAuction ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG ||
type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG || type== RoomSettingBean.QXRoomSettingTypeRoomTypeSIGNONTRACT ||
type == RoomSettingBean.QXRoomSettingTypeRoomClearMessage || type == QXRoomSettingTypeRoomOrderMic || type == RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen
|| type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomBgImage || type == -1) {

View File

@@ -0,0 +1,101 @@
package com.xscm.modulemain.dialog
import android.app.Dialog
import android.content.Context
import android.graphics.Point
import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewGroup
import com.blankj.utilcode.util.ScreenUtils
import com.xscm.modulemain.databinding.DialogUserNetWorthBinding
import com.xscm.moduleutil.color.ThemeableDrawableUtils
import com.xscm.moduleutil.utils.ColorManager
/**
* 项目名称:羽声语音
* 时间2025/11/25 14:35
* 用途:用户身价详情对话框
*/
class UserNetWorthDialog(context: Context) :
Dialog(context, com.xscm.moduleutil.R.style.BaseDialogStyleH) {
private lateinit var mBinding: DialogUserNetWorthBinding
init {
mBinding = DialogUserNetWorthBinding.inflate(LayoutInflater.from(context))
setContentView(mBinding.root)
setupWindow()
setupViews()
initView()
}
private fun setupViews() {
}
private fun setupWindow() {
val window = window ?: return
window.setGravity(Gravity.CENTER)
window.setLayout(
(ScreenUtils.getScreenWidth() * 315f / 375).toInt(),
ViewGroup.LayoutParams.WRAP_CONTENT
)
window.setBackgroundDrawableResource(android.R.color.transparent)
val params = window.attributes
params.windowAnimations = com.xscm.moduleutil.R.style.BaseDialogStyleH
window.attributes = params
}
fun initView() {
// 设置对话框不能通过点击外部关闭
setCancelable(false)
setCanceledOnTouchOutside(false)
ThemeableDrawableUtils.setThemeableRoundedBackground(
mBinding.tvConfirm,
ColorManager.getInstance().getPrimaryColorInt(),
53
)
mBinding.tvConfirm.setTextColor(ColorManager.getInstance().getButtonColorInt())
// 设置关闭按钮点击事件
mBinding.ivClose.setOnClickListener {
dismiss()
}
// 设置确认按钮点击事件
mBinding.tvConfirm.setOnClickListener {
dismiss()
}
}
/**
* 设置对话框大小基于375×933的屏幕尺寸宽高比为312×470
*/
private fun setDialogSize() {
val window = window
if (window != null) {
val display = window.windowManager.defaultDisplay
val size = Point()
display.getSize(size)
// 获取屏幕宽度
val screenWidth = size.x
// 基于375宽度计算312的宽度比例
val widthRatio = 312f / 375f
// 基于933高度计算470的高度比例
val heightRatio = 470f / 933f
// 计算对话框的实际宽度和高度
val dialogWidth = (screenWidth * widthRatio).toInt()
val dialogHeight = (screenWidth * heightRatio).toInt()
// 设置对话框宽高
window.setLayout(dialogWidth, dialogHeight)
}
}
}