滚动列表视图时折叠元素视图(Android)

时间:2017-01-10 08:13:13

标签: android listview user-interface layout android-collapsingtoolbarlayout

我正在尝试实现一种collpasing工具栏 - 但是没有工具栏(而不是工具栏,它将是一个下拉元素,它本质上是一个RelativeLayout,它正好位于下方的LinearLayout(下拉列表中的展开项)按下下拉列表后整个布局。

我考虑过实现折叠工具栏并将下拉列表放在工具栏中,但这可能不是一个好主意,因为下拉列表不是像imageview那样的静态组件。 我也在我的应用程序中使用ActionBar,因此迁移到工具栏很可能非常耗时,更不用说随附的所有技术问题了。

除此之外,我考虑过在列表视图中检测移动/滚动方向,然后隐藏/显示下拉菜单,但是当我只是将手指放在列表视图上时它就会非常错误(它发疯并切换从上到下,反之亦然非常快,直到我举起手指才停止。

还有其他选择来实现这种行为吗? enter image description here

2 个答案:

答案 0 :(得分:0)

ListView有默认scrollListener。您可以使用它来知道它是否滚动。然后隐藏dropDown!

        listView.setOnScrollListener(new AbsListView.OnScrollListener() {
                    @Override
                    public void onScrollStateChanged(AbsListView absListView, int i) {

    //detect stop. have a counter then view the dropDown

                    }

                    @Override
                    public void onScroll(AbsListView absListView, int i, int i1, int i2) {

    //Hide dropDown

@Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            if(mLastFirstVisibleItem<firstVisibleItem)
            {
                Log.i("SCROLLING DOWN","TRUE");
            }
            if(mLastFirstVisibleItem>firstVisibleItem)
            {
                Log.i("SCROLLING UP","TRUE");
            }
            mLastFirstVisibleItem=firstVisibleItem;

        }
                    }
                });

答案 1 :(得分:0)

我对其他人的建议非常好奇,因为我前段时间与之抗争。 Finnaly我正在列表视图中检测移动/滚动方向,然后隐藏/显示标题(如您所述)。我是这样做的(我没有错误):

listView.setOnScrollListener(OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

            final int currentFirstVisibleItem = view.getFirstVisiblePosition();

            if (currentFirstVisibleItem > mLastFirstVisibleItem) header.setVisibility(View.GONE);
            else if (currentFirstVisibleItem < mLastFirstVisibleItem) header.setVisibility(View.VISIBLE);

            mLastFirstVisibleItem = currentFirstVisibleItem;
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    });

我最后用标题来显示/隐藏动画。