代码之家  ›  专栏  ›  技术社区  ›  Brijesh Joshi

如何创建与instagram的“浏览”选项卡类似的选项卡视图(类别)

  •  1
  • Brijesh Joshi  · 技术社区  · 6 年前

    我要找的是 创建选项卡布局,可在滚动下面的内容时展开和折叠其高度 . 如果有人对我们如何实现这一目标有任何想法,那么这将非常有帮助。

    当它展开时,看起来是这样的

    1 回复  |  直到 6 年前
        1
  •  1
  •   Brijesh Joshi    6 年前

    由于没有发布答案,我找到了这些问题的解决方案,因此我将发布该解决方案作为对该问题的回答。

    这就是我所做的。

    我拍了两张回收新闻

    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
            }
        }
    }
    

    并已在rvItemList上应用OnScrollListener,如下所示。

    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.
        }
    })
    

    我希望这将有助于那些想要创建类似观点的人。