feat:首页-房间列表 麦位头像改为动态数据

This commit is contained in:
max
2024-07-11 15:41:02 +08:00
parent bc48cc86a9
commit 205e1180e7
6 changed files with 93 additions and 69 deletions

View File

@@ -1,9 +1,13 @@
package com.chwl.app.home.adapter package com.chwl.app.home.adapter
import android.graphics.Rect
import android.view.View import android.view.View
import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R import com.chwl.app.R
@@ -11,14 +15,54 @@ import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.load import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo import com.chwl.core.home.bean.HomeRoomInfo
import com.example.lib_utils.AppUtils
import com.example.lib_utils.UiUtils
import com.opensource.svgaplayer.SVGADrawable import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView import com.opensource.svgaplayer.SVGAImageView
/** /**
* create by lvzebiao @2019/11/13 * create by lvzebiao @2019/11/13
*/ */
class HomeRoomAdapter : class HomeRoomAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) {
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) { private var micUserItemViewPool = RecycledViewPool().apply {
setMaxRecycledViews(0, 50)
}
private val isRTL = UiUtils.isRtl(AppUtils.getApp())
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
return super.onCreateDefViewHolder(parent, viewType).apply {
val micUserRecyclerView = this.getView<RecyclerView>(R.id.recycler_view_users)
micUserRecyclerView.setOnTouchListener { v, event -> true }
micUserRecyclerView.setRecycledViewPool(micUserItemViewPool)
micUserRecyclerView.setHasFixedSize(true)
micUserRecyclerView.layoutManager =
LinearLayoutManager(parent.context, RecyclerView.HORIZONTAL, false).apply {
this.recycleChildrenOnDetach = true
this.isSmoothScrollbarEnabled
}
micUserRecyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
val offset = AppUtils.getApp().resources.getDimensionPixelOffset(R.dimen.dp_4) * -1
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
val position = parent.getChildAdapterPosition(view)
if (position != 0) {
if (isRTL) {
outRect.right = offset
} else {
outRect.left = offset
}
}
}
})
micUserRecyclerView.adapter = HomeRoomUserAdapter()
}
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) { override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply { helper.apply {
@@ -28,18 +72,10 @@ class HomeRoomAdapter :
setText(R.id.tv_desc, item.roomDesc) setText(R.id.tv_desc, item.roomDesc)
} }
val avatars: Array<ImageView> = arrayOf( val micUserRecyclerView = helper.getView<RecyclerView>(R.id.recycler_view_users)
helper.getView(R.id.iv_avatar_0), val userAdapter = micUserRecyclerView.adapter as HomeRoomUserAdapter
helper.getView(R.id.iv_avatar_1), userAdapter.setNewData(item.micUsers)
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isInvisible = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
val topView = helper.getView<ImageView>(R.id.iv_top) val topView = helper.getView<ImageView>(R.id.iv_top)
if (item.isHourTop1 == 1) { if (item.isHourTop1 == 1) {
topView.setImageResource(R.drawable.home_room_bg_hour_top) topView.setImageResource(R.drawable.home_room_bg_hour_top)

View File

@@ -0,0 +1,16 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.home.bean.MicUsersBean
class HomeRoomUserAdapter :
BaseQuickAdapter<MicUsersBean, BaseViewHolder>(R.layout.home_item_room_user) {
override fun convert(helper: BaseViewHolder, item: MicUsersBean?) {
val avatarView = helper.getView<ImageView>(R.id.iv_avatar)
avatarView.loadAvatar(item?.avatar)
}
}

View File

@@ -198,7 +198,7 @@ class HomeRecommendFragment : BaseViewBindingFragment<FragmentHomeRecommendBindi
override fun createFragment(position: Int): Fragment { override fun createFragment(position: Int): Fragment {
val itemId = getItemId(position) val itemId = getItemId(position)
return HomeTabRoomFragment.newInstance(itemId.toInt()).apply { return HomeTabRoomFragment.newInstance(itemId.toInt()).apply {
autoRefreshOnVisible = true this.autoRefreshOnVisible = true
} }
} }

View File

@@ -1,7 +1,6 @@
package com.chwl.app.home.fragment package com.chwl.app.home.fragment
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager

View File

@@ -59,66 +59,26 @@
android:textColor="#1E1E1F" android:textColor="#1E1E1F"
android:textColorHint="#1E1E1F" android:textColorHint="#1E1E1F"
android:textSize="@dimen/dp_12" android:textSize="@dimen/dp_12"
app:layout_constraintBottom_toTopOf="@id/fl_avatar" app:layout_constraintBottom_toTopOf="@id/recycler_view_users"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/tv_room_title" app:layout_constraintStart_toStartOf="@id/tv_room_title"
app:layout_constraintTop_toBottomOf="@id/tv_room_title" app:layout_constraintTop_toBottomOf="@id/tv_room_title"
tools:text="Content" /> tools:text="Content" />
<FrameLayout <androidx.recyclerview.widget.RecyclerView
android:id="@+id/fl_avatar" android:id="@+id/recycler_view_users"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_6" android:layout_marginTop="@dimen/dp_6"
android:nestedScrollingEnabled="false"
android:orientation="horizontal"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_online_number"
app:layout_constraintStart_toStartOf="@id/tv_room_title" app:layout_constraintStart_toStartOf="@id/tv_room_title"
app:layout_constraintTop_toBottomOf="@id/tv_desc"> app:layout_constraintTop_toBottomOf="@id/tv_desc"
tools:listitem="@layout/home_item_room_user" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar_0"
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="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_16"
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="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_32"
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="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_48"
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="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_64"
android:src="@drawable/default_avatar"
app:cborder_color="@color/white"
app:cborder_width="1px" />
</FrameLayout>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_online_number" android:id="@+id/tv_online_number"

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.imageview.ShapeableImageView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/iv_avatar"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:padding="@dimen/dp_0_5"
android:scaleType="centerCrop"
android:src="@drawable/default_avatar"
app:shapeAppearance="@style/shape_circle"
app:strokeColor="@color/white"
app:strokeWidth="@dimen/dp_1" />