Как создать вид вкладки (категорию), похожий на вкладку изучения instagram - PullRequest
0 голосов
/ 13 декабря 2018

То, что я ищу, это создание макета вкладки, которая может расширяться и сворачивать ее высоту при прокрутке содержимого ниже .Если у кого-то есть представление о том, как мы можем этого достичь, это будет очень полезно.

Когда развернуто Это выглядит так

image

When Collapsed It looks like this

1 Ответ

0 голосов
/ 07 февраля 2019

Поскольку ответа не было, и я нашел решение для этого, я публикую решение в качестве ответа на этот вопрос.

Итак, вот что я сделал.

Iвзяли два recyclerViews

  1. для отображения категории (горизонтальная прокрутка) (id = rvCategoryList)
  2. для отображения элементов категории (вертикальная прокрутка) (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.
    }
})

Надеюсь, это поможет тому, кто хочет создать похожий вид.

...