1.优化分类页面显示

This commit is contained in:
raoqian 2025-09-24 18:25:12 +08:00
parent 15f5c91d59
commit cdff6889f5
15 changed files with 231 additions and 120 deletions

View File

@ -1,16 +1,11 @@
package com.jia.er.nebuluxe.app.home
import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.NetworkUtils
import com.jia.er.nebuluxe.app.BuildConfig.DEBUG
import com.jia.er.nebuluxe.app.R
import com.jia.er.nebuluxe.app.basics.BaseActivity
import com.jia.er.nebuluxe.app.basics.Constants.CONSTANTS_short_play_id
import com.jia.er.nebuluxe.app.data.ShortListCategoryDataInfo
import com.jia.er.nebuluxe.app.databinding.ActivityGenresBinding
import com.jia.er.nebuluxe.app.net.MainViewModel
@ -42,20 +37,13 @@ class GenresActivity : BaseActivity<ActivityGenresBinding>() {
val manager1 = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
binding?.rvRanks?.layoutManager = manager1
binding?.rvRanks?.adapter = homeRankTrendingAdapter
homeRankTrendingAdapter?.submitList(it.data.list)
binding?.rvRanks?.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
if (parent.getChildPosition(view) != (it.data.list.size - 1)) {
outRect.bottom = -100
}
}
})
val list = mutableListOf<ShortListCategoryDataInfo.CategoryListData>()
if (DEBUG) {
list.addAll(it.data.list)
list.addAll(it.data.list)
}
list.addAll(it.data.list)
homeRankTrendingAdapter?.submitList(list)
homeRankTrendingAdapter?.isStateViewEnable = true
homeRankTrendingAdapter?.setStateViewLayout(this, R.layout.layout_emptyview)
// homeRankTrendingAdapter.addOnItemChildClickListener(

View File

@ -19,39 +19,30 @@ import com.jia.er.nebuluxe.app.video.PlayerDetailActivity
class GenresAdapter :
BaseQuickAdapter<ShortListCategoryDataInfo.CategoryListData, QuickViewHolder>(),
FullSpanAdapterType {
val rlBg = arrayOf(
R.drawable.iv_genres_1,
R.drawable.iv_genres_2,
R.drawable.iv_genres_3,
R.drawable.iv_genres_4
)
override fun onBindViewHolder(
holder: QuickViewHolder,
position: Int,
item: ShortListCategoryDataInfo.CategoryListData?
) {
when (position) {
0 -> {
holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_1)
holder.setBackgroundResource(R.id.line, R.color.E3D4FF)
}
1 -> {
holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_2)
holder.setBackgroundResource(R.id.line, R.color.BDF5E2)
}
2 -> {
holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_3)
holder.setBackgroundResource(R.id.line, R.color.FFFA80)
}
else -> {
holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_4)
holder.setBackgroundResource(R.id.line, R.color.F0C2E1)
}
if (position == 0) {
holder.setBackgroundResource(R.id.rl, R.drawable.iv_genres_1_first)
} else {
holder.setBackgroundResource(R.id.rl, rlBg[position % rlBg.size])
}
// holder.setBackgroundResource(R.id.line, rlBg[position % lineBg.size])
val view = holder.getView<RecyclerView>(R.id.rv_genres_item)
holder.setText(R.id.tv_type, item?.category_name)
holder.setText(
R.id.tv_num,
item?.short_play_list?.size.toString().plus("\n").plus("Dramas")
)
LOG.d("GenresAdapter", "onBindViewHolder.53:" + position)
view?.layoutManager = manager
view?.adapter = homeRankTrendingAdapter
homeRankTrendingAdapter?.submitList(item?.short_play_list)
@ -59,6 +50,14 @@ class GenresAdapter :
val homeRankTrendingAdapter = GenresItemAdapter()
var manager: RecyclerView.LayoutManager? = null
override fun getItemViewType(
position: Int,
list: List<ShortListCategoryDataInfo.CategoryListData>
): Int {
return position
}
override fun onCreateViewHolder(
context: Context,
parent: ViewGroup,
@ -66,7 +65,7 @@ class GenresAdapter :
): QuickViewHolder {
manager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
homeRankTrendingAdapter.setOnItemClickListener { adapter, view, position ->
LOG.d("GenresAdapter", "onCreateViewHolder.68:")
LOG.d("GenresAdapter", "onCreateViewHolder.68:" + viewType)
var it = adapter.getItem(position) as ShortPlayListData
LOG.d("GenresAdapter", "onCreateViewHolder.70:")
context.startActivity(
@ -78,6 +77,10 @@ class GenresAdapter :
)
})
}
return QuickViewHolder(R.layout.item_genres, parent)
if (viewType == 0) {
return QuickViewHolder(R.layout.item_genres_first, parent)
} else {
return QuickViewHolder(R.layout.item_genres, parent)
}
}
}

View File

@ -29,10 +29,8 @@ class HotAdapter :
posterView.apply {
// 顶部倾斜程度(左侧更低)
setTopSlantOffsetDp(25f)
// 左上小圆角,其他正常
setTopLeftShortStyle(topLeftDp = 12f, otherDp = 18f)
// 如果还需更贴合
setCornerRadiiDp(12f, 18f, 18f, 18f)
}

View File

@ -9,13 +9,15 @@ import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.KeyboardUtils
import com.bumptech.glide.Glide
import com.google.android.material.imageview.ShapeableImageView
import com.jia.er.nebuluxe.app.R
import com.jia.er.nebuluxe.app.basics.BaseActivity
import com.jia.er.nebuluxe.app.basics.Constants
import com.jia.er.nebuluxe.app.data.BaseRes
import com.jia.er.nebuluxe.app.data.ExampleKeywordDataRes
import com.jia.er.nebuluxe.app.databinding.ActivitySearchBinding
import com.jia.er.nebuluxe.app.net.MainViewModel
import com.jia.er.nebuluxe.app.utils.ImageLoadUtil
import com.jia.er.nebuluxe.app.utils.Memory
import com.jia.er.nebuluxe.app.utils.toast
import com.jia.er.nebuluxe.app.video.PlayerDetailActivity
@ -73,31 +75,15 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
openDetail(data.short_play_id)
}
}
binding.ivEmpty1.setOnClickListener(itemClickListener)
binding.ivEmpty2.setOnClickListener(itemClickListener)
binding.ivEmpty3.setOnClickListener(itemClickListener)
binding.ivEmpty4.setOnClickListener(itemClickListener)
binding.ivEmpty5.setOnClickListener(itemClickListener)
binding.btnMore.setOnClickListener { skip2Activity(HotActivity::class.java) }
mViewModel.hotsData.observe(this) {
val lists = it.data?.list.orEmpty().take(5) // 限制最多5个元素
lists.size.let { position ->
binding.ivEmpty1.visibility = if (position >= 1) View.VISIBLE else View.GONE
binding.ivEmpty2.visibility = if (position >= 2) View.VISIBLE else View.GONE
binding.ivEmpty3.visibility = if (position >= 3) View.VISIBLE else View.GONE
binding.ivEmpty4.visibility = if (position >= 4) View.VISIBLE else View.GONE
binding.ivEmpty5.visibility = if (position >= 5) View.VISIBLE else View.GONE
binding.ivEmpty1.setTag(it.data?.list[0])
binding.ivEmpty2.setTag(it.data?.list[1])
binding.ivEmpty3.setTag(it.data?.list[2])
binding.ivEmpty4.setTag(it.data?.list[3])
binding.ivEmpty5.setTag(it.data?.list[4])
Glide.with(this).load(it.data?.list[0]?.image_url).into(binding.ivEmpty1)
Glide.with(this).load(it.data?.list[1]?.image_url).into(binding.ivEmpty2)
Glide.with(this).load(it.data?.list[2]?.image_url).into(binding.ivEmpty3)
Glide.with(this).load(it.data?.list[3]?.image_url).into(binding.ivEmpty4)
Glide.with(this).load(it.data?.list[4]?.image_url).into(binding.ivEmpty5)
lists.size.let { size ->
setClickInfoAndVisibility(size, binding.ivEmpty1, it, 0, itemClickListener)
setClickInfoAndVisibility(size, binding.ivEmpty2, it, 1, itemClickListener)
setClickInfoAndVisibility(size, binding.ivEmpty3, it, 2, itemClickListener)
setClickInfoAndVisibility(size, binding.ivEmpty4, it, 3, itemClickListener)
setClickInfoAndVisibility(size, binding.ivEmpty5, it, 4, itemClickListener)
}
}
mViewModel.searchData.observe(this) {
@ -118,6 +104,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
mViewModel.hots()
}
private fun setClickInfoAndVisibility(
size: Int,
iv: ShapeableImageView,
it: BaseRes<ExampleKeywordDataRes>,
index: Int,
itemClickListener: View.OnClickListener
) {
if (size <= index) {
iv.visibility = View.GONE
} else {
iv.visibility = View.VISIBLE
iv.setTag(it.data?.list[index])
ImageLoadUtil.loadImage(it.data?.list[index]?.image_url, iv)
iv.setOnClickListener(itemClickListener)
}
}
override fun onReturn() {
super.onReturn()
binding.emptyPan.visibility = View.VISIBLE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -2,8 +2,8 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="@dimen/padding_108px" android:height="@dimen/padding_36px">
<shape android:shape="rectangle">
<solid android:color="#FFFFFF"/>
<corners android:radius="@dimen/padding_16px"/>
<solid android:color="#FFFFFF" />
<corners android:radius="@dimen/padding_24px" />
</shape>
</item>
</selector>

View File

@ -45,6 +45,7 @@
android:layout_marginTop="-12dp"
android:layout_marginRight="@dimen/padding_16px"
android:overScrollMode="never"
tools:listitem="@layout/item_hot"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"

View File

@ -1,63 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout 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/rl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_16px"
android:layout_marginRight="@dimen/padding_16px">
android:layout_height="@dimen/padding_263px"
android:layout_marginTop="@dimen/padding_n_120px"
android:background="@drawable/iv_genres_1">
<RelativeLayout
android:id="@+id/rl"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/iv_genres_1"
app:layout_constraintTop_toTopOf="parent">
android:orientation="horizontal"
android:weightSum="20">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_type"
android:layout_width="wrap_content"
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/padding_18px"
android:layout_marginTop="@dimen/padding_21px"
android:text="CEO"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_15px" />
android:layout_weight="18"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="@dimen/padding_16px"
android:layout_marginRight="@dimen/padding_21px"
android:text="43\nDramas"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_12px" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_genres_item"
android:layout_width="match_parent"
android:layout_height="@dimen/padding_140px"
android:layout_marginTop="@dimen/padding_10px"
android:layout_below="@id/tv_type"
android:background="@drawable/bg_genres"
android:layout_marginLeft="@dimen/padding_10px"
android:paddingLeft="@dimen/padding_7px"
android:paddingRight="@dimen/padding_10px"
android:layout_marginRight="@dimen/padding_10px"
tools:itemCount="1"
tools:listitem="@layout/item_genres_img" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_type"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/padding_18px"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_15px"
tools:text="CEO" />
<View
android:id="@+id/line"
android:layout_width="@dimen/padding_38px"
android:layout_height="@dimen/padding_3px"
android:background="#E3D4FF"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/padding_21px"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_12px"
tools:text="43\nDramas" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_genres_item"
android:layout_width="match_parent"
android:layout_height="@dimen/padding_140px"
android:layout_below="@id/tv_type"
android:layout_alignParentBottom="true"
android:layout_marginLeft="@dimen/padding_10px"
android:layout_marginTop="@dimen/padding_10px"
android:layout_marginRight="@dimen/padding_10px"
android:layout_marginBottom="@dimen/padding_20px"
android:background="@drawable/bg_genres"
android:paddingLeft="@dimen/padding_7px"
android:paddingRight="@dimen/padding_10px"
tools:itemCount="1"
tools:listitem="@layout/item_genres_img" />
</LinearLayout>
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</FrameLayout>

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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/rl"
android:layout_width="match_parent"
android:layout_height="@dimen/padding_215px"
android:background="@drawable/iv_genres_1_first">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="20">
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="18"
android:orientation="vertical">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/padding_18px"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_15px"
tools:text="CEO" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/padding_21px"
android:textColor="#0F0F0F"
android:textSize="@dimen/text_size_12px"
tools:text="43\nDramas" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_genres_item"
android:layout_width="match_parent"
android:layout_height="@dimen/padding_140px"
android:layout_below="@id/tv_type"
android:layout_alignParentBottom="true"
android:layout_marginLeft="@dimen/padding_10px"
android:layout_marginTop="@dimen/padding_10px"
android:layout_marginRight="@dimen/padding_10px"
android:layout_marginBottom="@dimen/padding_20px"
android:background="@drawable/bg_genres"
android:paddingLeft="@dimen/padding_7px"
android:paddingRight="@dimen/padding_10px"
tools:itemCount="1"
tools:listitem="@layout/item_genres_img" />
</LinearLayout>
<View
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</FrameLayout>

View File

@ -44,6 +44,14 @@
<dimen name="padding_38px">38dp</dimen>
<dimen name="padding_39px">39dp</dimen>
<dimen name="padding_40px">40dp</dimen>
<dimen name="padding_n_40px">-40dp</dimen>
<dimen name="padding_n_60px">-60dp</dimen>
<dimen name="padding_n_50px">-50dp</dimen>
<dimen name="padding_n_80px">-80dp</dimen>
<dimen name="padding_n_90px">-90dp</dimen>
<dimen name="padding_n_100px">-100dp</dimen>
<dimen name="padding_n_110px">-110dp</dimen>
<dimen name="padding_n_120px">-120dp</dimen>
<dimen name="padding_41px">41dp</dimen>
<dimen name="padding_42px">42dp</dimen>
<dimen name="padding_43px">43dp</dimen>

View File

@ -27,7 +27,7 @@ squareupOkhttp = "4.10.0"
squareupLoggingInterceptor = "4.10.0"
squareupRetrofit = "2.9.0"
squareupConverterGson = "2.9.0"
tencentMmkv = "1.3.7"
tencentMmkv = "1.3.14"
utilcodex = "1.31.1"
playServicesAdsIdentifier = "18.2.0"
#androidBilling = "7.0.0"