gpt4 book ai didi

android - 创建具有最小高度的自定义 AppBarLayout 子项?

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:14 24 4
gpt4 key购买 nike

我想创建一个自定义 View ,它将成为 AppBarLayout 的 subview 。当我向上滚动时,我需要这个 View 部分折叠,但不是完全折叠。它将有一个最小高度,并在小尺寸模式下固定在 AppBarLayout 的顶部,然后在向下 ScrollView 时扩展回大尺寸模式。

我花了很多时间查看 AppBarLayout 和 CoordinatorLayout 的源代码,但到目前为止我还没有找到一种方法来做我想做的事情。当向上 ScrollView 时,AppBarLayout 的子项看起来必须保持可见或完全消失。

任何人都可以建议一种方法来创建 AppBarLayout 的子级,该子级将以这种方式运行吗?

谢谢

最佳答案

这是食谱:

如果您设置了 android:minHeightAppBarLayout 将尊重该值,不会滚动超出会使您的组件变小的点。所以您的 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。当应用栏滚动时,您的组件将获得事件,以便您知道如何配置 View 。

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 并在那里添加监听器:

        // Add an OnOffsetChangedListener if possible
final ViewParent parent = getParent();
if (parent instanceof AppBarLayout) {
if (mOnOffsetChangedListener == null) {
mOnOffsetChangedListener = new OnOffsetChangedListener();
}
((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
}

看看 source code for CollapsingToolbarLayout因为它会给你一些想法。您的 View 需要做很多相同的事情。

您还可以查看我的示例项目,其中的图像会随着工具栏的滚动而缩放和移动:https://github.com/klarson2/Collapsing-Image

关于android - 创建具有最小高度的自定义 AppBarLayout 子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41438994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com