in app/src/main/java/com/google/reviewit/widget/ScrollWithHeadingsView.java [187:238]
private void onScrollChanged(
Content content, final Content prevContent, final Content nextContent) {
final View contentView = content.getContent();
final Heading heading = content.getHeading();
final Heading prevHeading =
prevContent != null
? prevContent.getHeading()
: null;
final Heading nextHeading =
nextContent != null
? nextContent.getHeading()
: null;
if (scroll.getScrollY() >= contentView.getTop()) {
int scrollYRelativeToContentView =
scroll.getScrollY() - contentView.getTop();
if (scrollYRelativeToContentView < heading.getSquishableHeight()) {
fixHeadingAtTop(heading, scrollYRelativeToContentView);
} else {
if (nextHeading != null
&& nextHeading.getView().getTranslationY() > 0) {
// the position of nextHeading is only updated after this
// onScrollChanged callback, but we need its correct position
// now, hence update its position now
nextHeading.getView().setTranslationY(
nextContent.getContent().getTop() - scroll.getScrollY());
}
if ((nextHeading != null
&& nextHeading.getView().getTranslationY() <= 0)
|| (prevHeading != null
&& prevHeading.getView().getTranslationY() >= 0)) {
heading.squish(heading.getSquishableHeight());
heading.getView().setTranslationY(
contentView.getTop() - scroll.getScrollY());
} else {
fixHeadingAtTop(heading, heading.getSquishableHeight());
}
}
} else {
heading.squish(0);
heading.getView().setTranslationY(
contentView.getTop() - scroll.getScrollY());
if (prevHeading != null) {
if (prevHeading.getView().getHeight()
> heading.getView().getTranslationY()) {
prevHeading.getView().setTranslationY(
heading.getView().getTranslationY()
- prevHeading.getView().getHeight());
}
}
}
}