Вот рецепт:
Если вы установили 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">
Далее вы хотите, чтобы ваш класс зарегистрировать OnOffsetChangedListener
с родителем AppBarLayout
. Ваш компонент будет получать события, поскольку панель приложений прокручивается, чтобы вы знали, как настроить свое представление.
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
, поскольку это даст вам некоторые идеи. Ваше мнение должно делать много чего.
Вы также можете посмотреть на мой образец проекта, который имеет изображение, которое масштабируется и перемещается как панели инструментов прокручивается: https://github.com/klarson2/Collapsing-Image
Это работает, спасибо. Я читал о exitUntilCollapsed, но неправильно понял. – HansG600