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

滚动列表视图时折叠元素视图(Android),android,listview,user-interface,layout,android-collapsingtoolbarlayout,Android,Listview,User Interface,Layout,Android Collapsingtoolbarlayout,我试图实现一种collpasing工具栏——但如果没有工具栏(而不是工具栏),它将是一个下拉元素,它本质上是一个相对的布局,它的线性布局就在下面(下拉列表中展开的项目),按下下拉列表后,它将在整个布局上悬停 我曾考虑过实现一个折叠工具栏,并将下拉列表放在工具栏内,但这可能不是一个好主意,因为下拉列表不像imageview那样是静态组件。 我也在我的应用程序中使用ActionBar,所以迁移到工具栏很可能非常耗时,更不用说随之而来的所有技术问题了 除此之外,我还考虑过在列表视图中检测移动/滚动方向

我试图实现一种collpasing工具栏——但如果没有工具栏(而不是工具栏),它将是一个下拉元素,它本质上是一个相对的布局,它的线性布局就在下面(下拉列表中展开的项目),按下下拉列表后,它将在整个布局上悬停

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

除此之外,我还考虑过在列表视图中检测移动/滚动方向,然后隐藏/显示下拉列表,但当我在列表视图中简单地握住手指时,它会非常混乱(它会很快从上到下切换,反之亦然,直到我抬起手指才会停止)

有没有其他方法可以实现这种行为?
列表视图
有一个默认的
滚动监听器
。您可以使用它来知道它是否在滚动。然后隐藏下拉列表

        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;

        }
                    }
                });
listView.setOnScrollListener(新的AbsListView.OnScrollListener(){
@凌驾
CrollStateChanged上的公共无效(AbsListView AbsListView,int i){
//检测停止。有一个计数器,然后查看下拉列表
}
@凌驾
public void onScroll(AbsListView AbsListView、int i、int i1、int i2){
//隐藏下拉列表
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
if(mLastFirstVisibleItemfirstVisibleItem)
{
Log.i(“向上滚动”、“为真”);
}
mLastFirstVisibleItem=firstVisibleItem;
}
}
});

列表视图
有一个默认的
滚动监听器
。您可以使用它来知道它是否在滚动。然后隐藏下拉列表

        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;

        }
                    }
                });
listView.setOnScrollListener(新的AbsListView.OnScrollListener(){
@凌驾
CrollStateChanged上的公共无效(AbsListView AbsListView,int i){
//检测停止。有一个计数器,然后查看下拉列表
}
@凌驾
public void onScroll(AbsListView AbsListView、int i、int i1、int i2){
//隐藏下拉列表
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
if(mLastFirstVisibleItemfirstVisibleItem)
{
Log.i(“向上滚动”、“为真”);
}
mLastFirstVisibleItem=firstVisibleItem;
}
}
});

我对其他人的建议非常好奇,因为我不久前就开始反对。最后,我在listview中检测移动/滚动方向,然后隐藏/显示标题(如您所述)。我是这样做的(我没有bug):

listView.setOnScrollListener(OnScrollListener()){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
final int currentFirstVisibleItem=view.getFirstVisiblePosition();
if(currentFirstVisibleItem>mLastFirstVisibleItem)header.setVisibility(View.GONE);
else if(currentFirstVisibleItem

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

我对其他人的建议很好奇,因为我不久前就反对这种做法。最后,我在listview中检测移动/滚动方向,然后隐藏/显示标题(如您所述)。我是这样做的(我没有bug):

listView.setOnScrollListener(OnScrollListener()){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
final int currentFirstVisibleItem=view.getFirstVisiblePosition();
if(currentFirstVisibleItem>mLastFirstVisibleItem)header.setVisibility(View.GONE);
else if(currentFirstVisibleItem

最后,我制作了标题以显示/隐藏动画。

但我需要知道方向。否则我不知道是否隐藏以显示下拉列表。好的,从功能上看,它是有效的。但是,即使我的动画是合并/扩展下拉列表元素,它似乎也会消失,并突然出现。请给出一个答案一个如何使其更平滑的示例?就像在一个正在折叠的工具栏中使用动画-但我需要知道方向。否则我不知道是否隐藏以显示下拉列表好吧,从功能上看,它是有效的。然而,即使我的合拢/扩展下拉列表元素的动画似乎它消失了,并且突然出现了..C请举例说明如何使它更平滑?就像在一个正在折叠的工具栏中使用动画-如果你开始滚动,但是你把手指放在一个地方,然后不抬起它会怎么样?它不是在你抬起手指之前不断地在上下快速切换吗?在我的例子中是这样的,如果你开始滚动,但是你拿着你的鳍呢把它放在一个地方,不要提起它。