Я бы посмотрел математический поток метода offsetChildAsNeeded
в AppBarLayout.ScrollingViewBehavior при запуске изменений прокрутки.
Как это частный метод и частный 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