- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我会观察 AppBarLayout.ScrollingViewBehavior 中 offsetChildAsNeeded
方法在运行滚动变化时的数学流程。
因为它是私有(private)方法,私有(private)方法是mOffsetDelta
,如何以编程方式监控它们?
(还不清楚该方法是如何使用offset
的。)
private void offsetChildAsNeeded(CoordinatorLayout parent, View child, View dependency) {
final CoordinatorLayout.Behavior behavior =
((CoordinatorLayout.LayoutParams) dependency.getLayoutParams()).getBehavior();
if (behavior instanceof Behavior) {
// Offset the child, pinning it to the bottom the header-dependency, maintaining
// any vertical gap, and overlap
final Behavior ablBehavior = (Behavior) behavior;
final int offset = ablBehavior.getTopBottomOffsetForScrollingSibling();
ViewCompat.offsetTopAndBottom(child, (dependency.getBottom() - child.getTop())
+ ablBehavior.mOffsetDelta
+ getVerticalLayoutGap()
- getOverlapPixelsForOffset(dependency));
}
}
注意:欢迎并接受那些解释 getTopBottomOffsetForScrollingSibling()
、(dependency.getBottom() - child.getTop())
,以及mOffsetDelta
最佳答案
您可以对这段代码进行逆向工程,但最终它是学术性的,因为我们这些凡人(即非 Google 的)程序员无法访问此处显示的值和方法。我猜他们认为我们实际可以使用的库越少,我们提交的错误报告就越少。叹息。
但这里有一个简短的解释:
首先是那行代码
final int offset = ablBehavior.getTopBottomOffsetForScrollingSibling();
似乎是早期修订的残余,因为从未实际使用过 offset
。新的表达式在更多情况下必须更准确一些。
ViewCompat.offsetTopAndBottom()
不是集合(绝对)运算,而是加法(相对)运算。因此,让我们假设正常的逻辑,并考虑这种行为实质上将 ScrollView 直接放在应用栏布局的下方。通常,应用栏的底部和 ScrollView 的顶部具有相同的值。由于应用栏布局(依赖项)已更改并且 ScrollView ( subview )尚未(尚未),那么
dependency.getBottom() - child.getTop()
是 child 的垂直偏移需要调整的相对量。
如果我对代码的解读是正确的,那么只有在应用栏布局具有偏移插值器的情况下,应用栏布局行为中的 mOffsetDelta
才是非零的。通常,应用栏自身不会以视差方式移动,因此对于我们关心的几乎所有情况,mOffsetDelta
都为零。 getVerticalLayoutGap
和 getOverlapPixelsForOffset
处理布局参数,例如 overlapTop
。
但事实证明,只需执行以下操作,您就可以在自己的行为子类中没有这些边缘情况的情况下完成大部分工作:
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child,
View dependency) {
// get the bottom of the app bar layout
int bottom = dependency.getBottom();
// position the top of the scrolling view there
return setTopAndBottomOffset(bottom);
}
我发现使用绝对偏移比使用相对偏移更容易一些。因此,实现滚动行为主要是确定依赖 View 的位置以及 ScrollView 需要基于该 View 的位置。
关于android - AppBarLayout.ScrollingViewBehavior 是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40021797/
我目前状态的视频,以便更好地了解我的情况: video RecyclerView 上面的所有东西都在 AppbarLayout 里面 具有类似行为的 reddit 应用示例: video 目标: 1-
我正在创建一个带有 header 的 RecyclerView,当您向上滚动 RecyclerView 时 header 会折叠。我可以通过下面的布局非常接近地实现这一点,使用透明的 AppBarLa
我有一个 AppBarLayout 和 NestedScrollView。我希望 NestedScrollView 每当它向下滚动时,AppBarLayout 也应该优雅地展开,而 NestedScr
我正在尝试获取 AppBarLayout 的布局参数,但出现此错误。 java.lang.ClassCastException: android.support.design.widget.Coord
我正在为我的应用程序实现自定义 header 。在 AppBarLayout 中,我使用工具栏和我的自定义布局(名为 CustomHeader)。 我的 CustomHeader 有左下角和右下角圆角
我是编程新手,我想添加一个设置菜单按钮。 就像图片上的一样,我的应用程序没有显示三点按钮。 MainActivity.java : public class MainActivity extends
我有一个带有 fragment 的 ViewPager,其中包含一个 RecyclerView。 CollapsingTollbarLayout 位于 ViewPager 之上。一切正常,除了在 Re
我想做这个, 在 Android Studio 的预览中看起来不错,但在运行时我得到这个 正如您在屏幕开头看到的那样,颜色是白色,我想添加我自己的颜色,在本例中为绿色。 最初它使用的是 Cordina
我正在使用此布局来尝试实现可折叠的应用栏。 android:theme="@style/ThemeOverlay.AppCompat.Dark"
所以我有一个带有 AppBarLayout 和 CollapsingToolbarLayout 的 CoordinatorLayout。这是展开(左图)和折叠(右图)时的样子 我遇到的第一个问题是,当
我尽量让红色布局滚动,这样他就隐藏了,TabLayout 就留在了最上面 我需要红色布局来为我填充圆形头像的高度。我尝试将TabLayout滚动到顶部,红色布局继续滚动隐藏? 无法发送图片,请点击链接
我正在尝试从顶部为 AppBarLayout 设置动画,就像 this 中的工具栏一样视频。 这是我的布局
我需要我的 AppBarLayout 具有透明背景。 当我将 AppBarLayout 的背景更改为具有 @null 或 @android:color/transparent 时,我在工具栏的边框处看
使用 AppBarLayout 时出错,我尝试了 Clean Project 和 Rebuild Project,但它们没有用。 运行程序没有问题。这是为什么? XML 文件:
我想要实现的结果与图片上的结果几乎相同,但没有折叠并且在工具栏文本下有选项卡布局。我使用 CollapsingTollbarLayout 完成了它,但如果我不希望它折叠,我认为这不是一个好方法。我应该
我在 CoordinatorLayout 和 RecyclerView 中使用 AppBarLayout、CollapsingToolbarLayout 创建了折叠透明搜索栏。让 recyclerVi
Android Google Play 应用如何在用户点击 AppBarlayout 时动态改变颜色? 我尝试了以下方法 tabLayout.setOnTabSelectedListener(new
在页面上的任意位置下拉(过度滚动)时,我一直在努力实现 AppBarLayout 的缩放效果。 期望效果示例: https://android-arsenal.com/details/1/4443 我
当我尝试为 AppBarLayout 设置一个特定的高度值时,阴影完全消失了。 这是错误还是预期的行为? 我使用的是设计库的 26.0.0 版。 最佳答案 设置属性动画
我在 AppBarLayout 中使用了 CollapsingToolbarLayout,用户可以使用 AppBarLayout 中的 setExpanded(boolean) 方法展开或折叠它。 问
我是一名优秀的程序员,十分优秀!