Поскольку ответа не было, и я нашел решение для этого, я публикую решение в качестве ответа на этот вопрос.
Итак, вот что я сделал.
Iвзяли два recyclerViews
- для отображения категории (горизонтальная прокрутка) (id = rvCategoryList)
- для отображения элементов категории (вертикальная прокрутка) (id = rvItemList)
Теперь взяли две переменные для отслеживания последней прокрутки и создали метод для установки высоты rvCategoryList
var lastY: Int = 0
var counter = 0
private fun setCategoryViewHeight(dy: Int) {
val params = rvCategoryList.layoutParams
if ((dy > 0 && lastY >= 0) || (dy < 0 && lastY <= 0)) {
counter = 0
params.height = params.height - dy
if (dy > 0) {
if (params.height < rvHeight / 1.7) {
params.height = (rvHeight / 1.7).toInt()
}
} else {
if (params.height > rvHeight) {
params.height = rvHeight
}
}
rvCategoryList.layoutParams = params
lastY = dy
} else {
counter++
if (counter > 2) {
counter = 0
lastY = 0
}
}
}
И применили OnScrollListener к rvItemList, как показано ниже.
rvItemList.clearOnScrollListeners()
rvItemList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
lastY = 0 //As the scroll state has been changed reinitializing the lastY variable.
}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
setCategoryViewHeight(dy) //Setting height everytime.
}
})
Надеюсь, это поможет тому, кто хочет создать похожий вид.