首页tab新增发现新朋友

This commit is contained in:
huangjian
2023-03-16 11:51:48 +08:00
parent efeea38cc1
commit 20fded3771
37 changed files with 764 additions and 67 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -51,7 +51,10 @@ public class RoomPlayDialog extends BottomSheetDialog {
private void init() {
binding.llRadish.setVisibility(GoldBoxHelper.isShowRadish() ? View.VISIBLE : View.GONE);
binding.llRadish.setOnClickListener(v -> PullRadishActivity.start(context));
binding.llRadish.setOnClickListener(v -> {
PullRadishActivity.start(context);
dismiss();
});
}
}

View File

@@ -14,6 +14,7 @@ import com.nnbc123.core.statistic.StatisticManager
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
import com.nnbc123.core.utils.toast
import com.nnbc123.app.base.BaseViewModel
import com.nnbc123.core.user.bean.UserInfo
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
@@ -28,11 +29,11 @@ class HomeViewModel : BaseViewModel() {
private val _gameRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val gameRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _gameRoomLiveData
private val _pickRoomLiveData = MutableLiveData<HomeRoomInfo>()
val pickRoomLiveData: LiveData<HomeRoomInfo> = _pickRoomLiveData
private val _pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
val pickRoomLiveData: LiveData<HomeRoomInfo?> = _pickRoomLiveData
private val _openGameRoomLiveData = MutableLiveData<Long>()
val openGameRoomLiveData: LiveData<Long> = _openGameRoomLiveData
private val _openGameRoomLiveData = MutableLiveData<Long?>()
val openGameRoomLiveData: LiveData<Long?> = _openGameRoomLiveData
private val _concernsLiveData = MutableLiveData<List<HomeRoomInfo>>()
val concernsLiveData: LiveData<List<HomeRoomInfo>> = _concernsLiveData
@@ -49,8 +50,8 @@ class HomeViewModel : BaseViewModel() {
private val _resourceLiveData = MutableLiveData<MutableList<ResourceInfo>>()
val resourceLiveData: LiveData<MutableList<ResourceInfo>> = _resourceLiveData
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo>()
val resourceJumpLiveData: LiveData<HomeRoomInfo> = _resourceJumpLiveData
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
private val _singleAnchorHomeLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val singleAnchorHomeLiveData: LiveData<ListResult<HomeRoomInfo>> = _singleAnchorHomeLiveData
@@ -60,16 +61,22 @@ class HomeViewModel : BaseViewModel() {
val singleRoomSortInfoLiveData: LiveData<ListResult<SingleRoomSortInfo>> =
_singleRoomSortInfoLiveData
private val _homeLiveTopInfoLiveData = MutableLiveData<HomeLiveTopInfo>()
val homeLiveTopInfoLiveData: LiveData<HomeLiveTopInfo> = _homeLiveTopInfoLiveData
private val _homeLiveTopInfoLiveData = MutableLiveData<HomeLiveTopInfo?>()
val homeLiveTopInfoLiveData: LiveData<HomeLiveTopInfo?> = _homeLiveTopInfoLiveData
private val _anchorInfoLiveData = MutableLiveData<AnchorInfo>()
val anchorInfoLiveData: LiveData<AnchorInfo> = _anchorInfoLiveData
private val _anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
val anchorInfoLiveData: LiveData<AnchorInfo?> = _anchorInfoLiveData
private val _partyRecommendRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val partyRecommendRoomLiveData: LiveData<ListResult<HomeRoomInfo>> =
_partyRecommendRoomLiveData
private val _giftServiceLiveData = MutableLiveData<ListResult<GiftServiceMsgVo>>()
val giftServiceLiveData: LiveData<ListResult<GiftServiceMsgVo>> = _giftServiceLiveData
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
fun getBannerInfo() {
safeLaunch {
_bannerLiveData.value = HomeModel.getHomeBanner("9")
@@ -261,5 +268,27 @@ class HomeViewModel : BaseViewModel() {
)
}
fun getServiceGiftRecord() {
safeLaunch(
onError = {
_giftServiceLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getServiceGiftRecord()
_giftServiceLiveData.value = ListResult.success(result, 1)
}
)
}
fun getNewFriendList() {
safeLaunch(
onError = {
_newFriendLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getNewFriendList()
_newFriendLiveData.value = ListResult.success(result, 1)
}
)
}
}

View File

@@ -0,0 +1,26 @@
package com.nnbc123.app.home.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.load
import com.nnbc123.app.ui.utils.loadAvatar
import com.nnbc123.core.home.bean.GiftServiceMsgVo
import com.nnbc123.core.utils.sub
class GiftServiceAdapter :
BaseQuickAdapter<GiftServiceMsgVo, BaseViewHolder>(R.layout.item_gift_service) {
override fun convert(helper: BaseViewHolder, item: GiftServiceMsgVo) {
helper.setText(R.id.tv_nick_send, item.senderNick.sub(4))
.setText(R.id.tv_nick_receiver, item.receiverNick.sub(4))
.setText(R.id.tv_gift_name, item.giftName)
.setText(R.id.tv_gift_num, "x${item.giftNum}")
helper.getView<ImageView>(R.id.iv_avatar_send).loadAvatar(item.senderAvatar)
helper.getView<ImageView>(R.id.iv_avatar_receiver).loadAvatar(item.receiverAvatar)
helper.getView<ImageView>(R.id.iv_gift).load(item.giftPicUrl)
}
}

View File

@@ -0,0 +1,52 @@
package com.nnbc123.app.home.adapter
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.nnbc123.app.R
import com.nnbc123.app.ui.utils.loadAvatar
import com.nnbc123.app.ui.utils.loadFromAssets
import com.nnbc123.app.vip.VipHelper
import com.nnbc123.core.user.bean.UserInfo
import com.opensource.svgaplayer.SVGAImageView
class RoomNewFriendsAdapter :
BaseQuickAdapter<UserInfo, BaseViewHolder>(R.layout.item_room_new_friends) {
override fun convert(helper: BaseViewHolder, item: UserInfo) {
helper.getView<ImageView>(R.id.iv_avatar).loadAvatar(item.avatar)
helper.setText(R.id.tv_desc, item.userDesc)
val tvOnlineText = helper.getView<TextView>(R.id.tv_online_text)
val svgaLiving = helper.getView<SVGAImageView>(R.id.svga_living)
val llOnline = helper.getView<View>(R.id.ll_online)
val viewOnline = helper.getView<View>(R.id.view_online)
if (item.isBanAccount) {
viewOnline.isVisible = true
tvOnlineText.text = "直播中"
svgaLiving.loadFromAssets("svag/home_living.svga")
llOnline.setOnClickListener {
}
} else {
viewOnline.isVisible = false
svgaLiving.setImageResource(R.drawable.ic_new_friends_msg)
tvOnlineText.text = "和TA聊"
llOnline.setOnClickListener {
}
}
val tvNickname = helper.getView<TextView>(R.id.tv_nickname)
tvNickname.text = item.nick
VipHelper.loadVipNickColor(tvNickname, item.userVipInfoVO, "#282828")
VipHelper.loadVipIcon(helper.getView(R.id.iv_vip_icon), item.userVipInfoVO)
}
}

View File

@@ -171,7 +171,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
mBinding.magicIndicatorEntrance.initIndicator(pagerList.size)
mBinding.magicIndicatorEntrance.setSelectedPage(centerIndex)
mBinding.magicIndicatorEntrance.visibility =
if (pagerList.size > 1) View.VISIBLE else View.INVISIBLE
if (pagerList.size > 1) View.VISIBLE else View.GONE
mBinding.viewPagerEntrance.adapter = object : PagerAdapter() {
val cacheItemView = SparseArray<RecyclerView>()

View File

@@ -20,18 +20,26 @@ import com.nnbc123.app.R
import com.nnbc123.app.avroom.activity.AVRoomActivity
import com.nnbc123.app.avroom.adapter.RoomVPAdapter
import com.nnbc123.app.base.BaseFragment
import com.nnbc123.app.common.EmptyViewHelper
import com.nnbc123.app.databinding.FragmentRecommendBinding
import com.nnbc123.app.home.HomeViewModel
import com.nnbc123.app.home.adapter.HomeSingleAnchorAdapter
import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter
import com.nnbc123.app.home.adapter.*
import com.nnbc123.app.home.dialog.RecommendRoomDialog
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.app.ui.webview.CommonWebViewActivity
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.nnbc123.core.home.bean.GiftServiceMsgVo
import com.nnbc123.core.home.bean.HomeRoomInfo
import com.scwang.smartrefresh.layout.internal.ProgressDrawable
import com.yinyuan.doudou.pay.adapter.GiveSearchAdapter
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.concurrent.TimeUnit
/**
* 音萌首页
@@ -42,6 +50,10 @@ class RecommendFragment : BaseFragment(),
private var mFragmentsBottom: MutableList<Fragment> = ArrayList()
private lateinit var singleAnchorAdapter: HomeSingleAnchorAdapter
private lateinit var giftServiceAdapter: GiftServiceAdapter
private lateinit var rvDelegate: RVDelegate<GiftServiceMsgVo>
private var disposable: Disposable? = null
private val homeViewModel: HomeViewModel by activityViewModels()
//仅埋点使用,不影响业务逻辑
@@ -69,13 +81,20 @@ class RecommendFragment : BaseFragment(),
override fun onResume() {
super.onResume()
loadData()
homeViewModel.getServiceGiftRecord()
}
override fun initiate() {
initRefreshView()
initTitleTab()
initSingleAnchor()
//initSingleAnchor()
giftServiceAdapter = GiftServiceAdapter()
rvDelegate = RVDelegate.Builder<GiftServiceMsgVo>()
.setAdapter(giftServiceAdapter)
.setRecyclerView(mBinding.rvGiftService)
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间"))
.setLayoutManager(LinearLayoutManager(mContext))
.build()
homeViewModel.resourceLiveData.observe(this) {
if (it.isNullOrEmpty() || it.size != 3) {
mBinding.llResource.isGone = true
@@ -122,6 +141,21 @@ class RecommendFragment : BaseFragment(),
}
}
}
homeViewModel.giftServiceLiveData.observe(viewLifecycleOwner) {
rvDelegate.loadData(it)
}
disposable = Observable.intervalRange(0, Int.MAX_VALUE.toLong(), 0, 5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.filter { rvDelegate.adapter.itemCount > 0 && isResumed }
.subscribe {
val index = (it % rvDelegate.adapter.itemCount).toInt()
if (index == 0) {
mBinding.rvGiftService.scrollToPosition(index)
} else {
mBinding.rvGiftService.smoothScrollToPosition(index)
}
}
}
private fun initRefreshView() {
@@ -141,14 +175,9 @@ class RecommendFragment : BaseFragment(),
}
private fun initTitleTab() {
val tagList = InitialModel.get().cacheInitInfo?.homeTabList.let {
if (it?.size == 2) it else arrayListOf("热门房间", "组队开黑")
}
val tagList = arrayListOf("发现新朋友", "组队开黑")
mFragmentsBottom.add(RoomNewFriendsFragment.newInstance())
mFragmentsBottom.add(HomePlayFragment.newInstance())
mFragmentsBottom.add(RoomHotFragment.newInstance())
if (tagList[0] != "组队开黑") {
mFragmentsBottom.reverse()
}
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(true)
val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList)
@@ -201,7 +230,12 @@ class RecommendFragment : BaseFragment(),
private fun loadData() {
homeViewModel.getHomeResource()
homeViewModel.getHomeSingleAnchorList()
//homeViewModel.getHomeSingleAnchorList()
}
override fun onDestroyView() {
super.onDestroyView()
disposable?.dispose()
}

View File

@@ -0,0 +1,77 @@
package com.nnbc123.app.home.fragment
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.nnbc123.app.base.BaseViewBindingFragment
import com.nnbc123.app.common.EmptyViewHelper
import com.nnbc123.app.databinding.FragmentRoomHotBinding
import com.nnbc123.app.home.HomeViewModel
import com.nnbc123.app.home.adapter.RoomHotAdapter
import com.nnbc123.app.home.adapter.RoomNewFriendsAdapter
import com.nnbc123.app.ui.utils.RVDelegate
import com.nnbc123.core.home.bean.HomeRoomInfo
import com.nnbc123.core.home.event.RefreshHomeDataEvent
import com.nnbc123.core.user.bean.UserInfo
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomNewFriendsFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
companion object {
fun newInstance(): RoomNewFriendsFragment {
val args = Bundle()
val fragment = RoomNewFriendsFragment()
fragment.arguments = args
return fragment
}
}
private lateinit var roomHotAdapter : RoomNewFriendsAdapter
private lateinit var rvDelegate: RVDelegate<UserInfo>
private var page = 1
private val pageSize = Int.MAX_VALUE
private val homeViewModel: HomeViewModel by activityViewModels()
override fun init() {
roomHotAdapter = RoomNewFriendsAdapter()
rvDelegate = RVDelegate.Builder<UserInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无新朋友"))
.setLayoutManager(LinearLayoutManager(mContext))
.setPageSize(pageSize)
.build()
homeViewModel.newFriendLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onResume() {
super.onResume()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
homeViewModel.getNewFriendList()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 979 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 511 B

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<stroke
android:width="2dp"
android:color="@color/white" />
<solid android:color="#ff6ce19a" />
</shape>

View File

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

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1px"
android:color="#5FCCE4" />
<solid android:color="#99ffffff" />
android:color="@color/white"
android:width="1dp" />
<solid android:color="#80ffffff" />
<corners
android:bottomLeftRadius="16dp"
android:bottomRightRadius="16dp"

View File

@@ -41,15 +41,12 @@
android:background="@drawable/bg_room_main_entrance"
android:visibility="visible">
<FrameLayout
android:id="@+id/fl_avatar"
android:layout_width="@dimen/dp_drag_layout_avatar_size"
android:layout_height="@dimen/dp_drag_layout_avatar_size"
android:layout_centerVertical="true"
android:layout_marginStart="12.5dp"
>
android:layout_marginStart="12.5dp">
<com.nnbc123.app.common.widget.CircleImageView
android:id="@+id/avatar_image"
@@ -69,6 +66,7 @@
android:layout_height="10dp"
android:layout_gravity="center"
android:background="@color/transparent" />
</FrameLayout>
<LinearLayout
@@ -78,6 +76,7 @@
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_5"
android:layout_toStartOf="@id/view_close"
android:visibility="gone"
android:layout_toEndOf="@id/fl_avatar"
android:orientation="vertical">
@@ -102,6 +101,7 @@
android:textColor="@color/white"
android:textSize="@dimen/dp_10"
tools:text="ID:666" />
</LinearLayout>
<ImageView

View File

@@ -172,7 +172,8 @@
android:layout_gravity="center_vertical"
android:layout_marginEnd="3dp"
android:scaleType="fitXY"
android:src="@drawable/ic_vip_room_bottom" />
android:src="@drawable/ic_vip_room_bottom"
android:visibility="gone" />
<LinearLayout
android:id="@+id/ll_rank"
@@ -336,9 +337,9 @@
android:id="@+id/room_more"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginEnd="13dp"
android:layout_marginStart="8dp"
android:layout_gravity="bottom"
android:layout_marginStart="8dp"
android:layout_marginEnd="13dp"
android:scaleType="center"
android:src="@drawable/icon_room_more" />

View File

@@ -44,10 +44,10 @@
<com.nnbc123.library.widget.DrawableCenterTextView
android:id="@+id/tv_search"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_height="32dp"
android:layout_gravity="end"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:layout_marginEnd="23dp"
android:layout_weight="1"
android:background="@drawable/shape_room_temp"
android:drawableStart="@mipmap/ic_search_main"
@@ -55,14 +55,14 @@
android:gravity="center"
android:onClick="@{click}"
android:text="搜索房间/昵称/ID"
android:textColor="#BABBCD"
android:textColor="#9EB5C5"
android:textSize="12sp" />
<ImageView
android:id="@+id/iv_ranking"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginEnd="23dp"
android:layout_marginBottom="2dp"
android:adjustViewBounds="true"
android:onClick="@{click}"
@@ -78,8 +78,8 @@
android:adjustViewBounds="true"
android:onClick="@{click}"
android:scaleType="center"
android:src="@drawable/ic_home_my_room" />
android:src="@drawable/ic_home_my_room"
android:visibility="gone" />
</LinearLayout>

View File

@@ -482,7 +482,7 @@
android:layout_height="0dp"
android:layout_marginStart="13dp"
android:layout_marginTop="2dp"
android:background="@drawable/bg_me_wallet_entrance"
android:background="@drawable/bg_me_level_entrance"
android:gravity="center"
android:onClick="@{click}"
android:paddingTop="17dp"
@@ -515,7 +515,6 @@
app:layout_constraintStart_toEndOf="@id/me_item_level"
app:layout_constraintTop_toTopOf="@id/me_item_level" />
<TextView
android:id="@+id/me_item_wallet"
android:layout_width="0dp"
@@ -592,6 +591,7 @@
android:layout_gravity="center_horizontal"
android:layout_marginTop="2dp"
android:layout_marginBottom="10dp"
android:visibility="gone"
android:background="@drawable/shape_me_indicator_bg" />
</LinearLayout>

View File

@@ -47,41 +47,92 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/ll_resource"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_resource_0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="centerCrop"
android:src="@drawable/ic_resource_0" />
android:layout_height="0dp"
android:src="@drawable/ic_resource_0"
app:layout_constraintDimensionRatio="94:120"
app:layout_constraintEnd_toStartOf="@id/iv_resource_1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.25" />
<ImageView
android:id="@+id/iv_resource_1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:scaleType="centerCrop"
android:src="@drawable/ic_resource_1" />
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:src="@drawable/ic_resource_1"
app:layout_constraintDimensionRatio="120:56"
app:layout_constraintEnd_toStartOf="@id/iv_resource_2"
app:layout_constraintStart_toEndOf="@id/iv_resource_0"
app:layout_constraintTop_toTopOf="@id/iv_resource_0"
app:layout_constraintWidth_percent="0.32" />
<ImageView
android:id="@+id/iv_resource_2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:scaleType="centerCrop"
android:src="@drawable/ic_resource_2" />
android:layout_height="0dp"
android:layout_marginStart="3dp"
android:src="@drawable/ic_resource_2"
app:layout_constraintDimensionRatio="120:56"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_resource_1"
app:layout_constraintTop_toTopOf="@id/iv_resource_0"
app:layout_constraintWidth_percent="0.32" />
<ImageView
android:id="@+id/iv_resource_3"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/ic_resource_3"
app:layout_constraintBottom_toBottomOf="@id/iv_resource_0"
app:layout_constraintDimensionRatio="243:56"
app:layout_constraintStart_toStartOf="@id/iv_resource_1"
app:layout_constraintWidth_percent="0.65" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:background="@drawable/bg_gift_service"
app:layout_constraintDimensionRatio="694:148"
app:layout_constraintEnd_toEndOf="@id/iv_resource_3"
app:layout_constraintStart_toStartOf="@id/iv_resource_0"
app:layout_constraintTop_toBottomOf="@id/iv_resource_0">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="21dp"
android:layout_marginTop="7dp"
android:text="热门"
android:textColor="@color/text_normal_282828"
android:textSize="14sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_gift_service"
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_gravity="bottom"
android:layout_marginStart="15dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="11dp" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/ll_single_anchor"
@@ -90,7 +141,7 @@
android:paddingStart="15dp"
android:paddingTop="8dp"
android:visibility="gone"
tools:visibility="visible">
tools:visibility="gone">
<TextView
android:layout_width="wrap_content"
@@ -128,7 +179,7 @@
android:paddingEnd="5dp"
android:scrollbars="none"
android:visibility="gone"
tools:visibility="visible" />
tools:visibility="gone" />
</LinearLayout>

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<com.nnbc123.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_send"
android:layout_width="24dp"
android:layout_height="24dp"
app:cborder_color="@color/white"
app:cborder_width="1dp" />
<TextView
android:id="@+id/tv_nick_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="#ff282828"
android:textSize="12sp"
tools:text="小半" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="赠送"
android:textColor="#ffffa826"
android:textSize="12sp" />
<com.nnbc123.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_receiver"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
app:cborder_color="@color/white"
app:cborder_width="1dp" />
<TextView
android:id="@+id/tv_nick_receiver"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="#ff282828"
android:textSize="12sp"
tools:text="小半" />
<TextView
android:id="@+id/tv_gift_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:textColor="#ffffa826"
android:textSize="12sp"
tools:text="星语心愿" />
<com.nnbc123.app.common.widget.CircleImageView
android:id="@+id/iv_gift"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
app:cborder_color="@color/white"
app:cborder_width="1dp" />
<TextView
android:id="@+id/tv_gift_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textColor="#ff878b9c"
android:textSize="14sp"
tools:text="x1" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_gift_service_arrow" />
</LinearLayout>

View File

@@ -0,0 +1,155 @@
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp">
<View
android:id="@+id/view_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_room_new_friends_bg"
app:layout_constraintDimensionRatio="335:93"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="parent" />
<com.nnbc123.app.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginStart="15dp"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_online"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginEnd="1dp"
android:layout_marginBottom="5dp"
android:background="@drawable/shape_home_online"
app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
app:layout_constraintEnd_toEndOf="@id/iv_avatar" />
<ImageView
android:id="@+id/iv_vip_icon"
android:layout_width="20dp"
android:layout_height="16dp"
android:layout_marginStart="12dp"
app:layout_constraintBottom_toBottomOf="@id/tv_nickname"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="@id/tv_nickname" />
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_normal_282828"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/ll_gender_age"
app:layout_constraintStart_toEndOf="@id/iv_vip_icon"
app:layout_constraintTop_toTopOf="@id/view_bg"
app:layout_constraintVertical_chainStyle="packed"
app:layout_goneMarginStart="12dp"
tools:text="余生点唱歌曲交友房间" />
<LinearLayout
android:id="@+id/ll_gender_age"
android:layout_width="32dp"
android:layout_height="15dp"
android:layout_marginStart="12dp"
android:layout_marginTop="6dp"
android:background="@drawable/shape_ff9cce_corner"
android:gravity="center_vertical"
app:layout_constraintBottom_toTopOf="@id/tv_desc"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toBottomOf="@id/tv_nickname">
<ImageView
android:id="@+id/iv_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="5dp"
android:src="@drawable/ic_home_woman" />
<TextView
android:id="@+id/tv_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:textColor="@color/white"
android:textSize="10sp"
tools:text="22" />
</LinearLayout>
<TextView
android:id="@+id/tv_constellation"
android:layout_width="38dp"
android:layout_height="15dp"
android:layout_marginStart="5dp"
android:background="@drawable/shape_f6f7f9_corner"
android:gravity="center"
android:text="巨蟹座"
android:textColor="#ffb3b5c4"
android:textSize="10dp"
app:layout_constraintBottom_toBottomOf="@id/ll_gender_age"
app:layout_constraintStart_toEndOf="@id/ll_gender_age"
app:layout_constraintTop_toTopOf="@id/ll_gender_age" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="6dp"
android:ellipsize="end"
android:lines="1"
android:text="一起来玩呀"
android:textColor="#ffbdbfd0"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toStartOf="@id/ll_online"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toBottomOf="@id/ll_gender_age" />
<LinearLayout
android:id="@+id/ll_online"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@id/view_bg"
app:layout_constraintEnd_toEndOf="@id/view_bg"
app:layout_constraintTop_toTopOf="@id/view_bg">
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_living"
android:layout_width="20dp"
android:layout_height="20dp" />
<TextView
android:id="@+id/tv_online_text"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:text="直播中"
android:textColor="#ffbdbfd0"
android:textSize="10sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -47,10 +47,12 @@
android:onClick="@{click}"
app:autoPlay="false"
app:fillMode="Clear"
app:layout_constraintBottom_toBottomOf="@id/iv_ship"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="750:725"
app:layout_constraintEnd_toEndOf="@id/iv_ship"
app:layout_constraintStart_toStartOf="@id/iv_ship"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.7"
app:loopCount="1"
app:source="svga/pull_radish_bg.svga" />

View File

@@ -0,0 +1,121 @@
package com.nnbc123.core.home.bean;
public class GiftServiceMsgVo {
private long roomUid;
private String roomTitle;
private long senderUid;
private long senderErbanNo;
private String senderAvatar;
private String senderNick;
private long receiverUid;
private long receiverErbanNo;
private String receiverAvatar;
private String receiverNick;
private String giftName;
private int giftNum;
private String giftPicUrl;
public long getRoomUid() {
return roomUid;
}
public void setRoomUid(long roomUid) {
this.roomUid = roomUid;
}
public String getRoomTitle() {
return roomTitle;
}
public void setRoomTitle(String roomTitle) {
this.roomTitle = roomTitle;
}
public long getSenderUid() {
return senderUid;
}
public void setSenderUid(long senderUid) {
this.senderUid = senderUid;
}
public long getSenderErbanNo() {
return senderErbanNo;
}
public void setSenderErbanNo(long senderErbanNo) {
this.senderErbanNo = senderErbanNo;
}
public String getSenderAvatar() {
return senderAvatar;
}
public void setSenderAvatar(String senderAvatar) {
this.senderAvatar = senderAvatar;
}
public String getSenderNick() {
return senderNick;
}
public void setSenderNick(String senderNick) {
this.senderNick = senderNick;
}
public long getReceiverUid() {
return receiverUid;
}
public void setReceiverUid(long receiverUid) {
this.receiverUid = receiverUid;
}
public long getReceiverErbanNo() {
return receiverErbanNo;
}
public void setReceiverErbanNo(long receiverErbanNo) {
this.receiverErbanNo = receiverErbanNo;
}
public String getReceiverAvatar() {
return receiverAvatar;
}
public void setReceiverAvatar(String receiverAvatar) {
this.receiverAvatar = receiverAvatar;
}
public String getReceiverNick() {
return receiverNick;
}
public void setReceiverNick(String receiverNick) {
this.receiverNick = receiverNick;
}
public String getGiftName() {
return giftName;
}
public void setGiftName(String giftName) {
this.giftName = giftName;
}
public int getGiftNum() {
return giftNum;
}
public void setGiftNum(int giftNum) {
this.giftNum = giftNum;
}
public String getGiftPicUrl() {
return giftPicUrl;
}
public void setGiftPicUrl(String giftPicUrl) {
this.giftPicUrl = giftPicUrl;
}
}

View File

@@ -194,6 +194,15 @@ object HomeModel : BaseModel() {
api.getPartyRecommendRoomList(uid, types)
}
suspend fun getServiceGiftRecord(): List<GiftServiceMsgVo>? =
launchRequest {
api.getServiceGiftRecord()
}
suspend fun getNewFriendList(): List<UserInfo>? =
launchRequest {
api.getNewFriendList()
}
private interface Api {
/**
@@ -412,6 +421,22 @@ object HomeModel : BaseModel() {
@Query("uid") uid: String,
@Query("types") types: String
): ServiceResult<List<HomeRoomInfo>>
/**
* 全服礼物记录
*
* @return
*/
@GET("/home/service/gift/record")
suspend fun getServiceGiftRecord(): ServiceResult<List<GiftServiceMsgVo>>
/**
* 发现新朋友
*
* @return
*/
@GET("/home/newFriend")
suspend fun getNewFriendList(): ServiceResult<List<UserInfo>>
}
}