酒吧房 交友小屋 UI

This commit is contained in:
2026-01-06 14:43:12 +08:00
parent 5cc393fe06
commit d48f13f266
47 changed files with 743 additions and 32 deletions

View File

@@ -32,7 +32,10 @@ public enum QXRoomSeatViewType {
* 酒吧
*/
PUB(11,"酒吧"),
/**
* 酒吧
*/
PRIVATE(12,"酒吧交友小屋"),
/**
* 小黑屋麦位
*/

View File

@@ -16,6 +16,7 @@ enum class RoomType(
BLACK_ROOM("小黑屋", 6),
JUKEBOX("点唱", 9),
PUB_ROOM("酒吧", 11),
PRIVATE_ROOM("酒吧交友小屋", 12),
MUTUAL_ENTERTAINMENT("互娱", 7),
SIGN_CONTRACT("签约", 10);

View File

@@ -2939,10 +2939,18 @@ public class RetrofitClient {
public void onResponse(Call<BaseModel<BeforeJoinRoomCheckBean>> call, Response<BaseModel<BeforeJoinRoomCheckBean>> response) {
if (response.code() == 200) {
BaseModel<BeforeJoinRoomCheckBean> beforeJoinRoomCheckBeanBaseModel = response.body();
if (beforeJoinRoomCheckBeanBaseModel.getCode() == 202) {
observer.onNext(beforeJoinRoomCheckBeanBaseModel.getData());
} else {
if (beforeJoinRoomCheckBeanBaseModel.getCode() == 1) {
observer.onNext(new BeforeJoinRoomCheckBean());
} else if (beforeJoinRoomCheckBeanBaseModel.getCode() == 301) {
setCode301(beforeJoinRoomCheckBeanBaseModel.getMsg());
joinRoomLoadListener.onJoinRoomLoad(beforeJoinRoomCheckBeanBaseModel.getMsg());
} else if (beforeJoinRoomCheckBeanBaseModel.getCode() == 0) {
ToastUtils.showLong(beforeJoinRoomCheckBeanBaseModel.getMsg());
joinRoomLoadListener.onJoinRoomLoad(beforeJoinRoomCheckBeanBaseModel.getMsg());
} else if (beforeJoinRoomCheckBeanBaseModel.getCode() == 202) {
observer.onNext(beforeJoinRoomCheckBeanBaseModel.getData());
joinRoomLoadListener.onJoinRoomLoad(beforeJoinRoomCheckBeanBaseModel.getMsg());
}
} else {
if (joinRoomLoadListener != null) {

View File

@@ -34,7 +34,7 @@ public class SPConstants {
public static final String FLOATING_SCREEN = "floatingScreen";//飘屏开关
public static final String SHELF = "shelf";//货架
public static final String SHELF = "shelf";//是否打开趣味玩法
public static final String TASK_SERVICE="taskService";//切换服务器
}

View File

@@ -127,12 +127,10 @@ public abstract class BaseMvpActivity<P extends IPresenter, VDB extends ViewData
disLoading();
}
private Activity mThis;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mThis = this;
RetrofitClient.getInstance().CpListener(new CPListener() {
@Override
public void onReceiveMsg(@NotNull RoomMessageEvent roomMessageEvent) {
@@ -145,24 +143,12 @@ public abstract class BaseMvpActivity<P extends IPresenter, VDB extends ViewData
}
});
RetrofitClient.getInstance().setJoinRoomLoadListener(result -> {
if (mThis instanceof MainActivity) {
((MainActivity) mThis).isShowLoading(false);
} else if (mThis instanceof MyRoomActivity) {
((MyRoomActivity) mThis).isShowLoading(false);
} else if (mThis instanceof DailyTasksActivity) {
((DailyTasksActivity) mThis).isShowLoading(false);
}
});
}
@Override
protected void onResume() {
super.onResume();
mThis = this;
}
@Override

View File

@@ -77,6 +77,7 @@ import com.xscm.moduleutil.dialog.NewPeopleDialog;
import com.xscm.moduleutil.dialog.RechargeDialogFragment;
import com.xscm.moduleutil.event.RoomOutEvent;
import com.xscm.moduleutil.event.UnreadCountEvent;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.listener.MessageListenerSingleton;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.BackgroundManager;
@@ -517,7 +518,9 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
//// RoomManager.instance( CommonAppContext.getInstance()).joinRoomWithRoomId(CommonAppContext.getInstance().playId, true);
// return;
// }
RetrofitClient.getInstance().setJoinRoomLoadListener(result -> {
isShowLoading(false);
});
MvpPre.loginIm();
Logger.i("MainActivity", "onResume");
// Beta.checkAppUpgrade(false, false);

View File

@@ -3728,6 +3728,11 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
setvisibTop(true)
QXRoomSeatViewType.PUB
}
RoomType.PRIVATE_ROOM -> {
changeBackgroundColor(mRoomInfoResp?.room_info?.room_background)
setvisibTop(true)
QXRoomSeatViewType.PRIVATE
}
null -> {
LogUtils.e("@@@", "RoomType is null")
QXRoomSeatViewType.NONE

View File

@@ -0,0 +1,26 @@
package com.xscm.modulemain.activity.room.contacts
import android.app.Activity
import com.xscm.moduleutil.activity.IPresenter
import com.xscm.moduleutil.activity.IView
import com.xscm.moduleutil.bean.GiftBean
import com.xscm.moduleutil.bean.RoonGiftModel
import com.xscm.moduleutil.bean.WalletBean
class PrivateContacts {
interface View : IView<Activity>{
fun wallet(list:List<String>,walletBean: WalletBean?)
fun getGiftList(list: List<RoonGiftModel>)
}
interface Ipre : IPresenter{
fun applyPit(roomId:String,pitNumber:String)
fun getGiftList(roomId: String)
fun wallet(list:List<String>)
}
}

View File

@@ -103,6 +103,7 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
private RoomMentorShipFragment mentorShipFragment;//签约
private RoomPubFragment roomPubFragment;//酒吧
private RoomPrivateFragment roomPrivateFragment;//酒吧交友小屋
public QXRoomSeatViewType qxRoomSeatViewType;
private void setRoomSeatViewType() {
if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) {
@@ -132,6 +133,8 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
qxRoomSeatViewType = QXRoomSeatViewType.SIGNCONTRACT;
} else if (roomType == RoomType.PUB_ROOM) {
qxRoomSeatViewType = QXRoomSeatViewType.PUB;
}else if (roomType == RoomType.PRIVATE_ROOM) {
qxRoomSeatViewType = QXRoomSeatViewType.PRIVATE;
}
}
@@ -305,6 +308,10 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
if (roomPubFragment == currentFragment && roomPubFragment.isAdded()) {
roomPubFragment.roomInfoUpdate(mRoomInfoResp);
}
}else if (roomType == RoomType.PRIVATE_ROOM) {
if (roomPrivateFragment == currentFragment && roomPrivateFragment.isAdded()) {
roomPrivateFragment.roomInfoUpdate(mRoomInfoResp);
}
}
}
}
@@ -433,6 +440,11 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
roomPubFragment = RoomPubFragment.Companion.newInstance(mRoomInfoResp);
} else roomPubFragment.roomTypeSwitch(mRoomInfoResp);
newFragment = roomPubFragment;
} else if (roomType == RoomType.PRIVATE_ROOM) {
if (roomPrivateFragment == null) {
roomPrivateFragment = RoomPrivateFragment.Companion.newInstance(mRoomInfoResp);
} else roomPrivateFragment.roomTypeSwitch(mRoomInfoResp);
newFragment = roomPrivateFragment;
}
if (newFragment != null) {

View File

@@ -0,0 +1,205 @@
package com.xscm.modulemain.activity.room.fragment
import android.animation.ObjectAnimator
import android.content.res.Resources
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
import android.view.animation.LinearInterpolator
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import com.blankj.utilcode.util.ActivityUtils
import com.bumptech.glide.Glide
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.room.contacts.PrivateContacts
import com.xscm.modulemain.activity.room.presenter.PrivatePresenter
import com.xscm.modulemain.databinding.FragmentRoomPrivateBinding
import com.xscm.moduleutil.base.BaseMvpFragment
import com.xscm.moduleutil.bean.RoonGiftModel
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.bean.room.RoomInfoResp
import com.xscm.moduleutil.bean.room.RoomUserBean
import com.xscm.moduleutil.utils.ImageUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import java.util.concurrent.TimeUnit
class RoomPrivateFragment(var mRoomInfoResp: RoomInfoResp?) :
BaseMvpFragment<PrivatePresenter, FragmentRoomPrivateBinding>(), PrivateContacts.View {
override fun getLayoutId(): Int {
return R.layout.fragment_room_private
}
override fun bindPresenter(): PrivatePresenter {
return PrivatePresenter(ActivityUtils.getTopActivity(), this)
}
// 无参构造函数
constructor() : this(null)
companion object {
fun newInstance(roomInfoResp: RoomInfoResp): RoomPrivateFragment {
return RoomPrivateFragment(roomInfoResp)
}
}
private var mUserInfo: RoomUserBean? = mRoomInfoResp?.user_info
private var mRoomId: String = mRoomInfoResp?.room_info?.room_id!!
private var giftList: MutableList<RoonGiftModel> = arrayListOf()
private var giftViewList:MutableList<ImageView> = arrayListOf()
override fun initData() {
MvpPre?.getGiftList(mRoomId)
}
override fun initView() {
giftViewList.clear()
giftViewList.add(mBinding?.ivGift1!!)
giftViewList.add(mBinding?.ivGift2!!)
giftViewList.add(mBinding?.ivGift3!!)
giftViewList.add(mBinding?.ivGift4!!)
giftViewList.add(mBinding?.ivGift5!!)
giftViewList.add(mBinding?.ivGift6!!)
giftViewList.forEach { it ->
it.setOnClickListener {
val showList = giftList.shuffled().take(1)
for (i in 0 until showList.size) {
val itemImage = it
val price = showList[i].gift_price.toInt()
// 根据价格设置不同的宽高
val (width, height) = when {
price > 500 -> Pair(64, 64)
price > 100 -> Pair(52, 52)
else -> Pair(40, 40)
}
// 设置布局参数假设itemImage是ImageView
val layoutParams = itemImage.layoutParams
layoutParams.width = width.dpToPx() // 需要实现dp转px的扩展函数
layoutParams.height = height.dpToPx()
itemImage.layoutParams = layoutParams
// 假设 padding 值单位dp
val paddingDp = 8
val paddingPx = paddingDp.dpToPx() // 转换为 px
// 设置 padding左、上、右、下
itemImage.setPadding(paddingPx, paddingPx, paddingPx, paddingPx)
Glide.with(it)
.load(showList[i].base_image)
.into(it as ImageView)
}
}
}
mBinding?.tvBack?.setOnClickListener {
//返回到上一个房间
}
}
fun roomInfoUpdate(roomInfoResp: RoomInfoResp) {
this.mRoomInfoResp = roomInfoResp
mUserInfo = this.mRoomInfoResp?.user_info
mRoomId = this.mRoomInfoResp?.room_info?.room_id!!
}
fun roomTypeSwitch(mRoomInfoResp: RoomInfoResp) {
this.mRoomInfoResp = mRoomInfoResp
mUserInfo = this.mRoomInfoResp?.user_info
mRoomId = this.mRoomInfoResp?.room_info?.room_id!!
initView()
}
override fun wallet(list: List<String>, walletBean: WalletBean?) {
}
override fun getGiftList(list: List<RoonGiftModel>) {
if (giftList.isEmpty()) {
giftList = list.toMutableList()
val showList = list.shuffled().take(6)
for (i in 0 until showList.size) {
val itemImage = giftViewList[i]
val price = showList[i].gift_price.toInt()
// 根据价格设置不同的宽高
val (width, height) = when {
price > 500 -> Pair(64, 64)
price > 100 -> Pair(52, 52)
else -> Pair(40, 40)
}
// 设置布局参数假设itemImage是ImageView
val layoutParams = itemImage.layoutParams
layoutParams.width = width.dpToPx() // 需要实现dp转px的扩展函数
layoutParams.height = height.dpToPx()
itemImage.layoutParams = layoutParams
// 假设 padding 值单位dp
val paddingDp = 8
val paddingPx = paddingDp.dpToPx() // 转换为 px
// 设置 padding左、上、右、下
itemImage.setPadding(paddingPx, paddingPx, paddingPx, paddingPx)
val delay = 200L * i
Glide.with(giftViewList[i])
.load(showList[i].base_image)
.into(giftViewList[i])
Observable.timer(delay,TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe {
startSmallFloatingAnimation(giftViewList[i]) // 延迟后执行动画
}
}
}else{
giftList.clear()
giftList = list.toMutableList()
}
}
fun startSmallFloatingAnimation(view: View, floatRangeDp: Float = 10f) {
// 1. 计算飘动范围(默认 ±10dp可调整
val floatDistance = floatRangeDp.dpToPx() // 转换为像素
// 2. 创建 ObjectAnimatorY 轴从 0 → -floatDistance → 0 → floatDistance → 0
val animator = ObjectAnimator.ofFloat(
view,
"translationY",
0f,
floatDistance,
0f,
-floatDistance,
0f
)
// 3. 设置动画参数
animator.duration = 2000 // 2秒完成一个周期
animator.repeatCount = ObjectAnimator.INFINITE // 无限循环
animator.interpolator = LinearInterpolator() // 匀速运动(可改用 AccelerateDecelerateInterpolator
// 4. 开始动画
animator.start()
}
// 在项目的任意工具类文件中(如 Extensions.kt
fun Int.dpToPx(): Int {
return (this * Resources.getSystem().displayMetrics.density).toInt()
}
fun Float.dpToPx(): Float {
return (this * Resources.getSystem().displayMetrics.density).toFloat()
}
}

View File

@@ -77,17 +77,14 @@ class RoomPubFragment(var mRoomInfoResp: RoomInfoResp?) :
view.setData(bean)
view.iv_custom_gift?.setOnClickListener {
ToastUtils.showShort("礼物")
GiftGivingDialog(ActivityUtils.getTopActivity(), mRoomId,view.pitBean.user_id,view.pitBean.nickname,view.pitBean.avatar).show()
}
view.ivYueT?.setOnClickListener {
ToastUtils.showShort("约她")
RoomAboutDialog(ActivityUtils.getTopActivity(),mRoomId,view.pitBean.user_id,view.pitBean.nickname,view.pitBean.avatar).show()
}
view.ivLiaoT?.setOnClickListener {
ToastUtils.showShort("撩她")
if (!SpUtil.getBooleanValue("pub", false)) {
FlirtatiousDialog(ActivityUtils.getTopActivity()).show()
}else{

View File

@@ -0,0 +1,63 @@
package com.xscm.modulemain.activity.room.presenter
import android.content.Context
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.contacts.PrivateContacts
import com.xscm.modulemain.activity.room.contacts.PubContacts
import com.xscm.moduleutil.bean.RoonGiftModel
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.presenter.BasePresenter
import com.xscm.moduleutil.presenter.RewardGiftContacts
import io.reactivex.disposables.Disposable
import java.lang.ref.WeakReference
class PrivatePresenter(context: Context, val view: PrivateContacts.View?) :
BasePresenter<PrivateContacts.View>(view, context), PrivateContacts.Ipre {
override fun applyPit(roomId: String, pitNumber: String) {
RetrofitClient.getInstance().applyPit(roomId, pitNumber, object : BaseObserver<String?>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(s: String) {
}
})
}
override fun getGiftList(roomId: String) {
RetrofitClient.getInstance().getGiftList(5,roomId, object : BaseObserver<List<RoonGiftModel>>() {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<RoonGiftModel>) {
if (MvpRef == null) {
MvpRef = WeakReference(view)
}
MvpRef.get()?.getGiftList(t)
}
})
}
override fun wallet(list:List<String>) {
RetrofitClient.getInstance().wallet(object : BaseObserver<WalletBean?>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(walletBean: WalletBean) {
if (MvpRef == null) {
MvpRef = WeakReference(view)
}
MvpRef.get()?.wallet(list,walletBean)
}
})
}
}

View File

@@ -4,6 +4,7 @@ package com.xscm.modulemain.activity.user.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -12,6 +13,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -25,6 +27,7 @@ import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.main.activity.MainActivity;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.adapter.TaskBoxAdapter;
import com.xscm.modulemain.adapter.TaskDataAdapter;
@@ -39,6 +42,7 @@ import com.xscm.modulemain.dialog.SignInDialog;
import com.xscm.modulemain.manager.RoomManager;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.RoomMessageEvent;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.CustomMsgCode;
import com.xscm.moduleutil.base.WebUrlConstants;
import com.xscm.moduleutil.bean.GiftBoxBean;
@@ -89,6 +93,15 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RetrofitClient.getInstance().setJoinRoomLoadListener(result -> {
isShowLoading(false);
});
}
@Override
protected void onResume() {
super.onResume();

View File

@@ -38,6 +38,7 @@ import com.xscm.moduleutil.bean.MyCpRoom;
import com.xscm.moduleutil.bean.MyFootResp;
import com.xscm.moduleutil.bean.MyRoomBean;
import com.xscm.moduleutil.event.RoomOutEvent;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ImageLoader;
import com.xscm.moduleutil.utils.SpUtil;
@@ -108,6 +109,9 @@ public class MyRoomActivity extends BaseMvpActivity<MyRoomPresenter, RoomActivit
initViewStyles();
updateSelectedState(0);
RetrofitClient.getInstance().setJoinRoomLoadListener(result -> {
isShowLoading(false);
});
}
@Override

View File

@@ -0,0 +1,157 @@
package com.xscm.modulemain.widget
import android.content.Context
import android.content.res.ColorStateList
import android.content.res.TypedArray
import android.graphics.Color
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.xscm.modulemain.R
import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.BaseWheatView
class RoomPrivateWheatView : BaseWheatView {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
private var iv_tag_type: ImageView? = null
var iv_custom_gift: ImageView? = null
private var hostTv: TextView? = null
private var tv_time: TextView? = null
private var ll_bottom: LinearLayout? = null
var ivYueT: ImageView? = null
var ivLiaoT: ImageView? = null
var ivHeadBg: ImageView? = null
override fun initPit(context: Context, attrs: AttributeSet) {
var typedArray: TypedArray? = null
try {
typedArray = context.obtainStyledAttributes(
attrs,
com.xscm.moduleutil.R.styleable.RoomDefaultWheatView
)
pitNumber =
typedArray.getString(com.xscm.moduleutil.R.styleable.RoomDefaultWheatView_room_wheat_number)
} finally {
typedArray?.recycle()
}
mCharmView = findViewById(R.id.charm_view)
mIvRipple = findViewById(R.id.iv_ripple)
mIvFrame = findViewById(R.id.iv_frame)
mIvShutup = findViewById(R.id.iv_shutup)
mRiv = findViewById(R.id.riv)
iv_tag_type = findViewById(R.id.iv_tag_type)
ll_bottom = findViewById(R.id.ll_bottom)
iv_custom_gift = findViewById(R.id.iv_custom_gift)
tv_time = findViewById(R.id.tv_time)
ivYueT = findViewById(R.id.iv_yue_t)
ivLiaoT = findViewById(R.id.iv_liao_t)
ivHeadBg = findViewById(R.id.iv_head_bg)
tv_time?.visibility = View.GONE
ll_bottom?.visibility = View.GONE
iv_custom_gift?.visibility = View.GONE
iv_tag_type?.visibility = View.GONE
ivHeadBg?.visibility = View.VISIBLE
}
override fun getLayoutId(): Int {
return R.layout.layout_room_pub_wheat
}
// 提供一个方法来设置这个属性,便于在代码中动态更改
fun setRoomWheatNumber(number: String?) {
this.pitNumber = number
}
fun setHostTv(hostTv: TextView) {
this.hostTv = hostTv
}
public override fun setPitData(bean: RoomPitBean) {
pitBean = bean // 统一使用参数 bean
stopAndClearAnimation() // 清理之前的动画资源
when (bean.pit_number) {
"1" -> {
ivHeadBg?.imageTintList = ColorStateList.valueOf(Color.parseColor("#FF7983F6"))
}
"2" -> {
ivHeadBg?.imageTintList = ColorStateList.valueOf(Color.parseColor("#FFFB85FF"))
}
}
tv_time?.visibility = View.GONE
ll_bottom?.visibility = View.GONE
iv_custom_gift?.visibility = View.GONE
iv_tag_type?.visibility = View.GONE
mCharmView.visibility = View.GONE
handleOnState(bean)
}
fun setSex(value: String?, format: Boolean) {
mCharmView.setSex("", "", value, format)
}
private fun handleOnState(bean: RoomPitBean) {
mIvRipple.visibility = VISIBLE
mTvName.text = bean.nickname
ImageUtils.loadHeadCC(bean.avatar, mRiv)
if (TextUtils.isEmpty(bean.dress)) {
mIvFrame.stopAll()
mIvFrame.visibility = INVISIBLE
} else {
mIvFrame.visibility = VISIBLE
mIvFrame.setSource(bean.dress, 3)
}
}
private val pitNumberText: String
get() {
return "虚位以待"
}
private fun stopAndClearAnimation() {
if (mIvRipple != null) {
mIvRipple.stopAnimation(true)
}
}
override fun onRemoteSoundLevelUpdate(userId: String, soundLevel: Int) {
}
override fun onLocalSoundLevelUpdate(volume: Int) {
}
override fun userJoined(userId: Int, elapsd: Int) {
}
override fun userOffline(userId: Int, reason: Int) {
}
override fun pkOffSide(userId: Int) {
}
}

View File

@@ -128,6 +128,7 @@ class RoomPubWheatView : BaseWheatView {
tv_time?.visibility = View.VISIBLE
ll_bottom?.visibility = View.VISIBLE
iv_custom_gift?.visibility = View.VISIBLE
tv_time?.text = "12:34"
}
if (TextUtils.isEmpty(bean.dress)) {

View File

@@ -65,7 +65,7 @@
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_20"
app:layout_constraintDimensionRatio="1:1.1"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="parent" />
@@ -75,7 +75,7 @@
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintDimensionRatio="1:1.1"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="parent" />

View File

@@ -0,0 +1,213 @@
<?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="@dimen/dp_400"
android:paddingTop="@dimen/dp_14"
android:paddingHorizontal="@dimen/dp_14">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_midd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_midd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.38" />
<TextView
android:id="@+id/tv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="交友小屋"
android:textColor="@color/white"
app:drawableLeftCompat="@mipmap/ic_topbar_back_dark"
app:drawableTint="@color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_top_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="倒计时16:00:11"
android:textColor="@color/white"
android:background="@mipmap/icon_pri_top_time_bg"
android:textSize="@dimen/sp_14"
android:paddingHorizontal="@dimen/dp_4"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_h_1" />
<com.xscm.modulemain.widget.RoomPrivateWheatView
android:id="@+id/rpwv_1"
android:layout_width="@dimen/dp_85"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintEnd_toEndOf="@id/guide_line_left"
app:layout_constraintStart_toStartOf="@id/guide_line_left"
app:layout_constraintTop_toTopOf="@id/guide_line_h_2" />
<com.xscm.modulemain.widget.RoomPrivateWheatView
android:id="@+id/rpwv_2"
android:layout_width="@dimen/dp_85"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1.11"
app:layout_constraintEnd_toEndOf="@id/guide_line_right"
app:layout_constraintStart_toStartOf="@id/guide_line_right"
app:layout_constraintTop_toTopOf="@id/guide_line_h_2" />
<ImageView
android:id="@+id/iv_heart_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:src="@mipmap/icon_pri_midd_heart_bg"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_h_2" />
<TextView
android:id="@+id/tv_heart_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/semibold"
android:text="525522"
android:textColor="#FFFF07C5"
android:textSize="@dimen/sp_24"
android:layout_marginTop="@dimen/dp_45"
app:layout_constraintEnd_toEndOf="@id/iv_heart_bg"
app:layout_constraintStart_toStartOf="@id/iv_heart_bg"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_h_midd" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.66" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.78" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_line_h_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.89" />
<ImageView
android:id="@+id/iv_gift_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_3"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_left"
app:layout_constraintTop_toTopOf="@id/guide_line_h_3" />
<ImageView
android:id="@+id/iv_gift_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_3"
app:layout_constraintEnd_toEndOf="@id/guide_line_right"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_h_3" />
<ImageView
android:id="@+id/iv_gift_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_4"
app:layout_constraintEnd_toEndOf="@id/guide_line_left"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guide_line_h_4" />
<ImageView
android:id="@+id/iv_gift_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_5"
app:layout_constraintEnd_toEndOf="@id/guide_line_midd"
app:layout_constraintStart_toStartOf="@id/guide_line_left"
app:layout_constraintTop_toTopOf="@id/guide_line_h_5" />
<ImageView
android:id="@+id/iv_gift_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_5"
app:layout_constraintEnd_toEndOf="@id/guide_line_right"
app:layout_constraintStart_toStartOf="@id/guide_line_midd"
app:layout_constraintTop_toTopOf="@id/guide_line_h_5" />
<ImageView
android:id="@+id/iv_gift_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_pri_gift_bg_1"
app:layout_constraintBottom_toBottomOf="@id/guide_line_h_4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/guide_line_right"
app:layout_constraintTop_toTopOf="@id/guide_line_h_4" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -31,7 +31,21 @@
android:clipToPadding="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!-- 用户头像 -->
<ImageView
android:id="@+id/iv_head_bg"
android:layout_width="0dp"
android:layout_height="0dp"
app:riv_oval="true"
android:visibility="gone"
android:background="@drawable/shape_circle"
android:backgroundTint="#7983F6"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.62" />
<!-- 用户头像 -->
<com.xscm.moduleutil.widget.CircularImage
android:id="@+id/riv"
@@ -104,7 +118,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.6"
app:layout_constraintWidth_percent="0.7"
app:loopCount="0"
app:source="mic.svga" />
<!-- 角色标签 - 头像下方覆盖部分头像 -->
@@ -124,8 +138,9 @@
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/riv"
android:background="@color/transparent"
android:layout_width="wrap_content"
android:layout_height="1dp"/>
android:layout_height="@dimen/dp_1"/>
<TextView
@@ -136,7 +151,7 @@
app:layout_constraintBottom_toBottomOf="@id/view_line_time"
android:drawableLeft="@mipmap/icon_pub_time_bg"
android:backgroundTint="@color/black"
android:text="12:34"
tools:text="12:34"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
android:drawablePadding="@dimen/dp_3"
@@ -246,9 +261,6 @@
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -3,4 +3,6 @@
<string name="main_tab2">广场</string>
<string name="main_tab3">消息</string>
<string name="main_tab4">我的</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources>