我见过几篇关于滚动和标题大小调整的文章,并且看到了@MathieuMaree在这个post中的回答,它让我首先了解如何在滚动ListView时调整标题大小。滚动时更改标题大小
因此,这里是我的实现:
我有一个包含3个标签与ExpandableListView一个ViewPager一个FragmentActivity。
这里是活动的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<bla.bla.bla.views.HeaderFicheEquipe
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >
</bla.bla.bla.views.HeaderFicheEquipe>
<RelativeLayout
android:id="@+id/tabView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_below="@+id/Header" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/titleStrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/PagerTabStripText" />
</android.support.v4.view.ViewPager>
</RelativeLayout>
</RelativeLayout>
:首先,我设置了OnScrollListener我ExpandableListView:
list.setOnScrollListener((CardActivity) getActivity());
然后,我实现了OnScrollListener我FragmentActivity:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int totalSize = 0;
View v = view.getChildAt(0);
if (v != null) {
if (elementSizes.size() > 0 && firstVisibleItem <= elementSizes.size()) {
for (int i = 0; i < firstVisibleItem; ++i) {
totalSize += elementSizes.get(i);
}
totalSize -= (v.getTop() - view.getPaddingTop());
if (totalSize > (maxHeightHeader - minHeightHeader))
totalSize = maxHeightHeader - minHeightHeader;
} else {
totalSize = maxHeightHeader - minHeightHeader;
}
header.getLayoutParams().height = maxHeightHeader - totalSize;
header.requestLayout();
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
elementsSize是一个列表,里面填充了我的第一个元素的大小ST。头部实际上正在减少,但我的onScroll被调用的方式太多了:当头部缩小时,我的列表上升,如果用户将手指放在屏幕上,它会再次使用Scroll上的Android调用,但是信息不正确。我的标题在很短的时间内(从我想要的尺寸跳到最大高度,从最大高度跳到想要的尺寸)发生了很多次变化,直到我达到最小尺寸,再次运行得很好。
我不知道我现在的执行是否正确,如果只是这种情况导致它无法正常工作或者我失去了一些东西。我看到一些应用程序在滚动时正在调整标题大小,但它们看起来工作方式不同:它们缩小标题,并且只有在标题以最小尺寸开始滚动到列表中时才起作用。
如何在页眉不是最小尺寸时“阻止”列表的滚动?或者我的代码有问题可以解决?
在此先感谢您的帮助
托马斯
主要问题是由ViewPager造成的。我尝试将'header.getLayoutParams()。height'更改为'header.translationY(translation)',但ViewPager停留在相同的位置,如果我移动包含ViewPager的Layout来跟随翻译,大小不会'没有改变,也没有完全填满屏幕。 –
您是否设法使其工作? –
可悲的是,没有。但是我现在正在开发一个新的应用程序,因此我必须找到解决方案,这是必需的。 –