这里是配方:
如果您设置了
android:minHeight
,则
AppBarLayout
将尊重该值,不会滚动超出使您的组件变小的点。 因此,您的XML布局可能如下所示:
<com.example.CustomCollapsingLayout
android:layout_width="match_parent"
android:layout_height="320dp"
android:minHeight="108dp"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
接下来,你需要让你的类在父级AppBarLayout
上注册一个OnOffsetChangedListener
。随着应用栏的滚动,你的组件将会接收到事件,以便你知道如何配置你的视图。
class OnOffsetChangedListener implements AppBarLayout.OnOffsetChangedListener {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
final int scrollRange = appBarLayout.getTotalScrollRange();
float offsetFactor = (float) (-verticalOffset) / (float) scrollRange;
...
本文将向您展示如何查找总滚动范围,然后找到总滚动范围与当前滚动位置之间的比率,即应用栏在其滚动中的位置。
您应该像CollapsingToolbarLayout
一样做;重写onAttachedToWindow
并在那里添加监听器:
final ViewParent parent = getParent();
if (parent instanceof AppBarLayout) {
if (mOnOffsetChangedListener == null) {
mOnOffsetChangedListener = new OnOffsetChangedListener();
}
((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
}
请查看
CollapsingToolbarLayout的源代码,它会给你一些想法。您的视图需要做很多相同的事情。
您还可以查看我的示例项目,其中包含一个随着工具栏滚动而缩放和移动的图像:
https://github.com/klarson2/Collapsing-Image。