我正在使用appCompat操作栏。我尝试制作像instagram这样的主页,同时用户向下滚动操作栏是隐藏的,反之亦然。
以下代码是滚动列表视图时隐藏和显示操作的最基本方法
int mLastFirstVisibleItem = 0;
if (view.getId() == mListView.getId()) {
final int currentFirstVisibleItem = mListView.getFirstVisiblePosition();
if (currentFirstVisibleItem > mLastFirstVisibleItem) {
getSupportActionBar().hide();
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
getSupportActionBar().show();
}
mLastFirstVisibleItem = currentFirstVisibleItem;
}
问题是当我慢慢滚动列表视图时,操作栏将保持隐藏并重复显示。它不会让我能够控制我想隐藏多少或显示操作栏。我想要的是当我向下或向上滚动列表视图时,操作栏将最终跟随手势,当用户从屏幕上切换它将隐藏或显示时,取决于屏幕上保持可见操作栏的大小。
例如,当我向下滚动2px时,操作栏将上升或隐藏2px。如果操作栏大小保留在屏幕上是20px,而操作栏大小是50px,它将隐藏它,如下面的代码。
//this is just a demo of how I want the action bar to work not any type of programming language
//visibleActionBarOnscreen is the actionbarsize remain on screen
if(visibleActionBarOnScreen > actiobarSize/2){
//show the action bar
}else{
//hide the action bar
}
Push out/pull in ActionBar when ListView is scrolled此链接教授如何控制操作栏。但是我仍然不知道如何完成它。另外它不会自动重新调整操作栏以完全隐藏或显示,但是当用户从屏幕上移开时,操作栏出现在屏幕的一半。请帮我完成这个,我将100%apperciate!
答案 0 :(得分:1)
如果您想要一个平滑过渡条,您可能希望使用布局(可能是水平线性布局,将内容水平放入操作栏)以及动画/过渡您的自己的自定义操作栏app-header通过设置负边距将其拉出屏幕顶部。 (这是一种具有更多可定制性的替代解决方案。)
这是设置布局边距动画的示例:Change Left Margin Using Animation(您必须将其更改为上边距)
然而,这不会成为&#34;坚持&#34;像你一样的动作栏(它不会在2px或中途停留 等)。实施&#34;坚持&#34;滚动操作栏你想要覆盖ListView或CustomScrollView上的OnScrollListener()
并做一些这样的数学运算:
int scrollpos = (int)view.getScrollY();
if(scrollpos<70) { //trigger scroll movement
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)findViewById(R.id.ListView).getLayoutParams();
params.topMargin = -scrollpos;
//if scrollpos = 0, then topMargin will = 0, completely visible.
//if scroll is past 70, then topMargin will = -70, completely hidden.
//assuming your action-bar is 70px
findViewById(R.id.ListView).setLayoutParams(params);
}
您实际上必须通过获取和设置topMargin
来设置LayoutParams
,我没有将其包括在内。我远离任何Java IDE,所以我现在无法编译代码。
希望这有帮助,