feat:完成首页UI改动

This commit is contained in:
Max
2023-11-24 16:51:34 +08:00
parent f5ba7b3f22
commit e1b7a5464d
15 changed files with 328 additions and 486 deletions

View File

@@ -14,20 +14,20 @@ import kotlinx.coroutines.async
class HomeViewModel : BaseViewModel() {
private val _tabHomeLiveData = MutableLiveData<List<HomeTabMapInfo>?>()
val tabHomeLiveData: MutableLiveData<List<HomeTabMapInfo>?> = _tabHomeLiveData
private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
private val _currentResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
val currentResourceLiveData: MutableLiveData<List<CurrentResourceInfo>?> = _currentResourceLiveData
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
private val _homeChatPickLiveData = MutableLiveData<String?>()
val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
// private val _tabHomeLiveData = MutableLiveData<List<HomeTabMapInfo>?>()
// val tabHomeLiveData: MutableLiveData<List<HomeTabMapInfo>?> = _tabHomeLiveData
//
// private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
// val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
//
// private val _currentResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
// val currentResourceLiveData: MutableLiveData<List<CurrentResourceInfo>?> = _currentResourceLiveData
//
// private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
// val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
//
// private val _homeChatPickLiveData = MutableLiveData<String?>()
// val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
private val _gameRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val gameRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _gameRoomLiveData
@@ -62,65 +62,65 @@ class HomeViewModel : BaseViewModel() {
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
fun getHomeTabName() {
safeLaunch(
onError = {
_tabHomeLiveData.value = null
},
block = {
_tabHomeLiveData.value = HomeModel.getHomeTabHome()
}
)
}
// fun getHomeTabName() {
// safeLaunch(
// onError = {
// _tabHomeLiveData.value = null
// },
// block = {
// _tabHomeLiveData.value = HomeModel.getHomeTabHome()
// }
// )
// }
/**
* 首页改版资源位
*/
fun getCurrentResourceInfo() {
safeLaunch(
onError = {
_currentResourceLiveData.value = null
},
block = {
_currentResourceLiveData.value = HomeModel.getCurrentResource()
}
)
}
// /**
// * 首页改版资源位
// */
// fun getCurrentResourceInfo() {
// safeLaunch(
// onError = {
// _currentResourceLiveData.value = null
// },
// block = {
// _currentResourceLiveData.value = HomeModel.getCurrentResource()
// }
// )
// }
fun getResourceJumpInfo(id: Int) {
safeLaunch(
onError = {
_resourceJumpLiveData.value = null
it.message.toast()
},
block = {
_resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id)
}
)
}
// fun getResourceJumpInfo(id: Int) {
// safeLaunch(
// onError = {
// _resourceJumpLiveData.value = null
// it.message.toast()
// },
// block = {
// _resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id)
// }
// )
// }
//
// fun getHomeChatPick() {
// safeLaunch(
// onError = {
// _homeChatPickLiveData.value = null
// it.message.toast()
// },
// block = {
// _homeChatPickLiveData.value = HomeModel.getHomeChatPick()
// }
// )
// }
fun getHomeChatPick() {
safeLaunch(
onError = {
_homeChatPickLiveData.value = null
it.message.toast()
},
block = {
_homeChatPickLiveData.value = HomeModel.getHomeChatPick()
}
)
}
fun getBannerInfo() {
safeLaunch(
onError = {
_bannerLiveData.value = null
},
block = {
_bannerLiveData.value = HomeModel.getHomeBanner("1")
}
)
}
// fun getBannerInfo() {
// safeLaunch(
// onError = {
// _bannerLiveData.value = null
// },
// block = {
// _bannerLiveData.value = HomeModel.getHomeBanner("1")
// }
// )
// }
fun getTagInfo() {
safeLaunch {

View File

@@ -1,18 +1,12 @@
package com.chwl.app.home.adapter
import android.view.View
import android.widget.ImageView
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.opensource.svgaplayer.SVGAImageView
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.TextUtils
/**
* create by lvzebiao @2019/11/13
@@ -23,22 +17,9 @@ class HomeHotAdapter :
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
setText(R.id.tv_online_number, "${item.onlineNum}")
setText(R.id.tv_online_number, item.onlineNum.toString())
setText(R.id.tv_room_title, item.title)
}
helper.setGone(R.id.iv_room_tag, !TextUtils.isEmptyText(item.tagPict))
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
val icTopList = helper.getView<AppCompatImageView>(R.id.iv_top_list)
if(item.isHourTop1 == 1){
icTopList.visibility = View.VISIBLE
icTopList.setImageResource(R.drawable.bg_recommend_hour_list)
} else if(item.isWeekTop1 == 1){
icTopList.visibility = View.VISIBLE
icTopList.setImageResource(R.drawable.bg_recommend_weekly_list)
} else {
icTopList.visibility = View.INVISIBLE
}
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
@@ -52,23 +33,5 @@ class HomeHotAdapter :
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
val svgaPk = helper.getView<SVGAImageView>(R.id.svga_pk)
if (item.isCrossPking) {
svgaPk.visibility = View.VISIBLE
svgaPk.loadFromAssets("svga/svga_home_pk.svga")
} else {
svgaPk.visibility = View.GONE
}
val svgaLiving = helper.getView<SVGAImageView>(R.id.svga_living)
svgaLiving.loadFromAssets("svga/home_white_living.svga")
}
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
super.onViewAttachedToWindow(holder)
val svgaLiving = holder.getView<SVGAImageView>(R.id.svga_living)
svgaLiving?.loadFromAssets("svga/home_white_living.svga")
}
}

View File

@@ -1,86 +1,59 @@
package com.chwl.app.home.fragment
import android.view.Gravity
import android.view.View
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.FragmentHomeBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeBannerAdapter
import com.chwl.app.home.dialog.RecommendRoomDialog
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity
import com.chwl.app.ui.search.SearchActivity
import com.chwl.app.ui.user.adapter.MainIndicatorAdapter
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.DemoCache
import com.chwl.core.UriProvider
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.library.utils.ListUtils
import com.chwl.library.utils.ResUtil
import com.zhpan.bannerview.BannerViewPager
/**
* Peko首页
*/
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener,
MainIndicatorAdapter.OnItemSelectListener {
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener {
private val mFragments = mutableListOf<Class<out Fragment>>()
private val mTabInfoList = mutableListOf<HomeTagInfo>()
private val homeViewModel: HomeViewModel by activityViewModels()
// private val mFragments = mutableListOf<Class<out Fragment>>()
// private val mTabInfoList = mutableListOf<HomeTagInfo>()
// private val homeViewModel: HomeViewModel by activityViewModels()
private var mBanner: BannerViewPager<BannerInfo>? = null
companion object {
private const val TAG = "HomeFragment"
}
// private var mBanner: BannerViewPager<BannerInfo>? = null
override fun init() {
mBanner = view?.findViewById(R.id.banner)
initTitleTab()
// mBanner = view?.findViewById(R.id.banner)
// initTitleTab()
initListener()
homeViewModel.bannerLiveData.observe(this) {
it?.let {
if (ListUtils.isListEmpty(it)) {
mBanner?.visibility = View.GONE
return@let
}
mBanner?.visibility = View.VISIBLE
mBanner?.adapter = HomeBannerAdapter()
mBanner?.post {
mBanner?.apply {
this.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
//首页_banner
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SIX),
Pair(IReportConstants.MODULE, IReportConstants.PEKO_HOMEPAGE)
)
)
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
}
childFragmentManager.beginTransaction()
.replace(R.id.frameLayout, RecommendFragment(), "RECOMMEND").commitAllowingStateLoss()
// homeViewModel.bannerLiveData.observe(this) {
// it?.let {
// if (ListUtils.isListEmpty(it)) {
// mBanner?.visibility = View.GONE
// return@let
// }
// mBanner?.visibility = View.VISIBLE
// mBanner?.adapter = HomeBannerAdapter()
// mBanner?.post {
// mBanner?.apply {
// this.setPageMargin(UIUtil.dip2px(mContext, 8.0))
// .setScrollDuration(800)
// .setOnPageClickListener { _: View?, position: Int ->
// //首页_banner
// ReportManager.get().reportEvent(
// IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
// Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SIX),
// Pair(IReportConstants.MODULE, IReportConstants.PEKO_HOMEPAGE)
// )
// )
// CommonJumpHelper.bannerJump(context, it[position])
// }
// .create(it)
// }
// }
// }
// }
// homeViewModel.currentResourceLiveData.observe(this) {
// it?.let {
// if(it.size != 2){
@@ -112,32 +85,32 @@ class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClic
// }
// }
// }
homeViewModel.resourceJumpLiveData.observe(this) {
dialogManager.dismissDialog()
it?.let {
if (it.isPick) {
AVRoomActivity.start(context, it.uid)
} else {
RecommendRoomDialog.newInstance(it).show(context)
}
}
}
homeViewModel.homeChatPickLiveData.observe(viewLifecycleOwner) {
dialogManager.dismissDialog()
it?.let {
if (it.isNotEmpty()) {
NimP2PMessageActivity.start(context, it)
}
}
}
homeViewModel.getBannerInfo()
// homeViewModel.resourceJumpLiveData.observe(this) {
// dialogManager.dismissDialog()
// it?.let {
// if (it.isPick) {
// AVRoomActivity.start(context, it.uid)
// } else {
// RecommendRoomDialog.newInstance(it).show(context)
// }
// }
// }
//
// homeViewModel.homeChatPickLiveData.observe(viewLifecycleOwner) {
// dialogManager.dismissDialog()
// it?.let {
// if (it.isNotEmpty()) {
// NimP2PMessageActivity.start(context, it)
// }
// }
// }
// homeViewModel.getBannerInfo()
// homeViewModel.getCurrentResourceInfo()
}
private fun initListener() {
binding.ivSearch.setOnClickListener(this)
binding.ivRanking.setOnClickListener(this)
// binding.ivRanking.setOnClickListener(this)
binding.ivMyRoom.setOnClickListener(this)
}
@@ -180,63 +153,63 @@ class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClic
}
}
/**
* 初始化推荐
*/
private fun initTitleTab() {
mTabInfoList.add(
HomeTagInfo(
6,
ResUtil.getString(R.string.home_fragment_homefragment_04),
0
)
)
mTabInfoList.add(
HomeTagInfo(
7,
ResUtil.getString(R.string.home_fragment_homefragment_07),
0
)
)
mFragments.add(RecommendFragment::class.java)
mFragments.add(AccompanyFragment::class.java)
// /**
// * 初始化推荐
// */
// private fun initTitleTab() {
// mTabInfoList.add(
// HomeTagInfo(
// 6,
// ResUtil.getString(R.string.home_fragment_homefragment_04),
// 0
// )
// )
// mTabInfoList.add(
// HomeTagInfo(
// 7,
// ResUtil.getString(R.string.home_fragment_homefragment_07),
// 0
// )
// )
// mFragments.add(RecommendFragment::class.java)
// mFragments.add(AccompanyFragment::class.java)
//
// val commonNavigator = CommonNavigator(context)
// commonNavigator.setTitleWrapContent(false)
// commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
// commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
// val magicIndicatorAdapter = MainIndicatorAdapter(context, mTabInfoList.map { it.name })
// magicIndicatorAdapter.setOnItemSelectListener(this)
// commonNavigator.adapter = magicIndicatorAdapter
// binding.magicIndicator.navigator = commonNavigator
// binding.viewPager.adapter =
// object : FragmentStateAdapter(childFragmentManager, lifecycle) {
// override fun createFragment(position: Int): Fragment {
// return mFragments[position].newInstance()
// }
//
// override fun getItemCount(): Int {
// return mFragments.size
// }
//
// }
// ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
// binding.viewPager.offscreenPageLimit = 1
// }
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
val magicIndicatorAdapter = MainIndicatorAdapter(context, mTabInfoList.map { it.name })
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
binding.viewPager.adapter =
object : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun createFragment(position: Int): Fragment {
return mFragments[position].newInstance()
}
// override fun onItemSelect(position: Int, view: TextView?) {
// binding.viewPager.currentItem = position
// //点击顶部tab上报
// val map = HashMap<String, Any>(3)
// map[IReportConstants.HOMEPAGE_TAB] = mTabInfoList[position].id
// map[IReportConstants.MODULE] = IReportConstants.PEKO_HOMEPAGE
// ReportManager.get().reportEvent(IReportConstants.TAB_HOMEPAGE_CLICK, map)
// }
override fun getItemCount(): Int {
return mFragments.size
}
}
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
binding.viewPager.offscreenPageLimit = 1
}
override fun onItemSelect(position: Int, view: TextView?) {
binding.viewPager.currentItem = position
//点击顶部tab上报
val map = HashMap<String, Any>(3)
map[IReportConstants.HOMEPAGE_TAB] = mTabInfoList[position].id
map[IReportConstants.MODULE] = IReportConstants.PEKO_HOMEPAGE
ReportManager.get().reportEvent(IReportConstants.TAB_HOMEPAGE_CLICK, map)
}
override fun onDestroyView() {
super.onDestroyView()
mTabInfoList.clear()
mFragments.clear()
}
// override fun onDestroyView() {
// super.onDestroyView()
// mTabInfoList.clear()
// mFragments.clear()
// }
}

View File

@@ -4,6 +4,8 @@ import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
@@ -69,7 +71,7 @@ class RecommendFragment : BaseViewBindingFragment<FragmentRecommendBinding>() {
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, "暂无熱門推薦"))
.setLayoutManager(GridLayoutManager(mContext, 2))
.setLayoutManager(LinearLayoutManager(mContext, RecyclerView.VERTICAL, false))
.build()
homeViewModel.homeHotRoomLiveData.observe(this) {
rvDelegate.loadData(it)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="30"
android:viewportHeight="30">
<path
android:pathData="M21.026,20.071C22.336,18.537 23.078,16.59 23.078,14.539C23.079,9.823 19.256,6 14.539,6C9.823,6 6,9.823 6,14.539C6,19.256 9.823,23.079 14.539,23.079C15.384,23.08 16.225,22.955 17.033,22.709C17.388,22.598 17.586,22.222 17.478,21.867C17.37,21.512 16.995,21.311 16.639,21.417C15.959,21.624 15.251,21.729 14.539,21.729C10.569,21.728 7.35,18.51 7.35,14.539C7.35,10.569 10.569,7.35 14.539,7.35C18.51,7.35 21.729,10.569 21.729,14.539C21.729,16.423 20.982,18.204 19.679,19.546C19.382,19.852 19.386,20.34 19.687,20.642L22.851,23.806C23.116,24.066 23.54,24.064 23.802,23.802C24.064,23.54 24.066,23.116 23.806,22.851L21.026,20.071Z"
android:strokeWidth="0.5"
android:fillColor="#B4B7BD"
android:fillType="nonZero"
android:strokeColor="#B4B7BD"/>
</vector>

View File

@@ -4,167 +4,71 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_normal_1c1b22">
android:background="@color/color_F7F7F7">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_300"
android:layout_height="0dp"
android:background="@drawable/bg_home_top"
app:layout_constraintDimensionRatio="375:178"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:id="@+id/layout_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_54"
android:layout_marginBottom="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_44"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.coorchice.library.SuperTextView
android:id="@+id/iv_search"
android:layout_width="0dp"
android:layout_height="@dimen/dp_32"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="1"
android:drawableStart="@drawable/ic_home_search"
android:drawablePadding="@dimen/dp_6"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_13"
android:paddingEnd="0dp"
android:text="@string/search_id_room"
android:textColor="@color/color_B8B7C7"
android:textSize="@dimen/sp_12"
app:corner="@dimen/dp_16"
app:solid="@color/color_FAFBFC" />
<ImageView
android:visibility="gone"
android:id="@+id/iv_ranking"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/ic_home_rank" />
android:id="@+id/iv_search"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_10"
android:gravity="center_vertical"
android:scaleType="centerInside"
android:src="@drawable/ic_home_search" />
<ImageView
android:id="@+id/iv_my_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
android:adjustViewBounds="true"
android:scaleType="center"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_20"
android:scaleType="centerInside"
android:src="@drawable/ic_home_my_room" />
</LinearLayout>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20"
android:text="@string/home_fragment_homefragment_04"
android:textColor="@color/color_1E1E1F"
android:textSize="@dimen/dp_16"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/layout_menu"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/layout_menu" />
<ImageView
android:layout_width="@dimen/dp_23"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:src="@drawable/base_ic_indicator"
app:layout_constraintEnd_toEndOf="@id/tv_title"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_bar">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
app:elevation="0dp"
app:layout_behavior="com.chwl.app.ui.widget.AppBarLayoutBehavior">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cs_resource"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:paddingStart="@dimen/dp_14"
android:paddingEnd="@dimen/dp_14">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_resource0"
android:layout_width="@dimen/dp_0"
android:layout_height="0dp"
android:scaleType="centerCrop"
android:visibility="gone"
tools:visibility="visible"
app:layout_constraintDimensionRatio="170:82"
app:layout_constraintEnd_toStartOf="@+id/iv_resource1"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_corner_radius="@dimen/dp_4"
tools:src="@drawable/default_banner" />
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_resource1"
android:visibility="gone"
tools:visibility="visible"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_0"
android:layout_marginStart="@dimen/dp_10"
android:scaleType="centerCrop"
app:layout_constraintDimensionRatio="170:82"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toEndOf="@+id/iv_resource0"
app:layout_constraintTop_toTopOf="parent"
app:riv_corner_radius="@dimen/dp_4"
tools:src="@drawable/default_banner" />
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_80"
android:layout_marginTop="@dimen/dp_10"
android:visibility="gone"
app:bvp_auto_play="true"
app:bvp_can_loop="true"
app:bvp_indicator_checked_color="@color/color_9168FA"
app:bvp_indicator_normal_color="@color/color_B3B3C3"
app:bvp_indicator_radius="@dimen/dp_4"
app:bvp_indicator_visibility="visible"
app:bvp_page_style="multi_page_scale"
app:layout_constraintDimensionRatio="345:80"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_resource0"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<com.chwl.app.ui.widget.magicindicator.MagicIndicator
android:id="@+id/magic_indicator"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_22"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_12" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_8" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
app:layout_constraintTop_toBottomOf="@id/tv_title" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -4,153 +4,132 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_4"
android:layout_marginEnd="@dimen/dp_4"
android:layout_marginBottom="@dimen/dp_6"
android:clipChildren="false"
android:clipToPadding="false">
<com.chwl.app.common.widget.RectRoundImageView
android:id="@+id/iv_room_image"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="@dimen/dp_1"
android:src="@drawable/default_cover"
app:borderRadius="@dimen/dp_16"
app:layout_constraintDimensionRatio="170:174"
app:layout_constraintEnd_toEndOf="@+id/iv_top_list"
app:layout_constraintStart_toStartOf="@+id/iv_top_list"
app:layout_constraintTop_toTopOf="@+id/iv_top_list"
app:type="round" />
android:paddingVertical="@dimen/dp_6">
<View
android:id="@+id/v_bg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_66"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/bg_mask_home_item"
app:layout_constraintBottom_toBottomOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_top_list"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_0"
android:src="@drawable/bg_recommend_weekly_list"
android:visibility="invisible"
app:layout_constraintDimensionRatio="174:178"
app:layout_constraintEnd_toEndOf="parent"
android:layout_height="@dimen/dp_84"
android:layout_marginHorizontal="@dimen/dp_12"
android:background="@drawable/shape_white_8dp_round"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_room_tag"
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/iv_room_image"
android:layout_width="@dimen/dp_88"
android:layout_height="@dimen/dp_88"
android:src="@drawable/default_cover"
app:borderRadius="@dimen/dp_8"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/v_bg"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearance="@style/shape_home_recommend_item" />
<TextView
android:id="@+id/tv_tag"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_6"
android:layout_marginTop="@dimen/dp_6"
app:layout_constraintStart_toStartOf="@+id/iv_room_image"
app:layout_constraintTop_toTopOf="@+id/iv_room_image"
tools:src="@drawable/tag_101" />
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginBottom="5dp"
android:drawableEnd="@drawable/home_ic_tag"
android:drawablePadding="@dimen/dp_2"
android:gravity="center"
android:text="熱門"
android:textColor="#FFB02C"
android:textSize="@dimen/dp_11"
app:layout_constraintBottom_toTopOf="@id/tv_room_title"
app:layout_constraintStart_toEndOf="@id/iv_room_image"
app:layout_constraintTop_toTopOf="@id/v_bg"
app:layout_constraintVertical_chainStyle="packed" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_room_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_10"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/color_1E1E1F"
android:textSize="@dimen/dp_16"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/fl_avatar"
app:layout_constraintEnd_toStartOf="@+id/tv_online_number"
app:layout_constraintStart_toEndOf="@id/iv_room_image"
app:layout_constraintTop_toBottomOf="@id/tv_tag"
tools:text="@string/layout_item_room_common_02" />
<FrameLayout
android:id="@+id/fl_avatar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
app:layout_constraintBottom_toTopOf="@+id/tv_room_title"
app:layout_constraintStart_toStartOf="@+id/iv_room_image">
android:layout_marginTop="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_room_title"
app:layout_constraintTop_toBottomOf="@+id/tv_room_title">
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_0"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_1"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginStart="18dp"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_14"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_2"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginStart="36dp"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_28"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_3"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginStart="54dp"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_42"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_4"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginStart="72dp"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_56"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
</FrameLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_room_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_8"
android:layout_marginBottom="@dimen/dp_8"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/color_white"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/iv_room_image"
app:layout_constraintEnd_toStartOf="@+id/svga_living"
app:layout_constraintStart_toStartOf="@id/iv_room_image"
tools:text="@string/layout_item_room_common_02" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_living"
android:layout_width="@dimen/dp_10"
android:layout_height="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_2"
app:layout_constraintBottom_toBottomOf="@+id/tv_online_number"
app:layout_constraintEnd_toStartOf="@+id/tv_online_number"
app:layout_constraintTop_toTopOf="@+id/tv_online_number" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/svga_pk"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_22"
app:layout_constraintBottom_toBottomOf="@+id/fl_avatar"
app:layout_constraintEnd_toEndOf="@+id/tv_online_number"
app:layout_constraintTop_toTopOf="@+id/fl_avatar" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_online_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_16"
android:drawableTop="@drawable/home_ic_hot"
android:drawablePadding="@dimen/dp_3"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="@color/color_white"
android:textSize="@dimen/sp_11"
app:layout_constraintBottom_toBottomOf="@+id/tv_room_title"
app:layout_constraintEnd_toEndOf="@+id/iv_room_image"
app:layout_constraintTop_toTopOf="@+id/tv_room_title"
android:textColor="#84868A"
android:textSize="@dimen/dp_12"
app:layout_constraintBottom_toBottomOf="@id/v_bg"
app:layout_constraintEnd_toEndOf="@+id/v_bg"
app:layout_constraintTop_toTopOf="@id/v_bg"
tools:text="266" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -591,4 +591,13 @@
<item name="windowNoTitle">true</item>
</style>
<style name="shape_home_recommend_item">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopLeft">@dimen/dp_8</item>
<item name="cornerSizeTopRight">@dimen/dp_20</item>
<item name="cornerSizeBottomLeft">@dimen/dp_8</item>
<item name="cornerSizeBottomRight">@dimen/dp_20</item>
</style>
</resources>