feat:首页-房间列表 麦位头像改为动态数据
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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"
|
||||||
|
13
app/src/main/res/layout/home_item_room_user.xml
Normal file
13
app/src/main/res/layout/home_item_room_user.xml
Normal 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" />
|
Reference in New Issue
Block a user