Исправить элемент в ObservableScrollView Android

Я пытаюсь исправить элемент в ScrollView, когда он ударил ActionBar. Он останавливается правильно, но когда я возвращаюсь в основную позицию прокрутки, я получаю случайное поле над макетом (скриншот 3). (Поле в скриншоте 2 не является ошибкой)

Скриншот проблемы

Мой слушатель ObservableScrollView

if(t > stackHeight && !animationActionBarstackedBg){
                animationActionBarstackedBg = true;
            } else if (t < stackHeight && animationActionBarstackedBg){
                animationActionBarstackedBg = false;
            }

            frameImg.setPadding(frameImg.getPaddingLeft(), t/2, frameImg.getPaddingRight(), frameImg.getPaddingBottom());

            if(animationActionBarstackedBg){
                panelTitleContainer.setPadding(panelTitleContainer.getPaddingLeft(), t-stackHeight, panelTitleContainer.getPaddingRight(), panelTitleContainer.getPaddingBottom());
            }

Где t - ScrollY, stackHeight - высота изображения, frameImg - это FrameLayout, содержащий ImageView (для создания анимации, подобной Google I/O 2014), а panelTitleContainer - это макет с коричневым макетом.

Есть ли способ исправить элемент в виде прокрутки?

1 ответ

Решение

Решено с помощью setTranslationY()

if(t > stackHeight && !animationActionBarstackedBg){
    animationActionBarstackedBg = true;
} else if (t < stackHeight && animationActionBarstackedBg){
    animationActionBarstackedBg = false;
}

frameImg.setTranslationY(svMain.getScrollY() * 0.5f);

if(!animationActionBarstackedBg){
    panelTitleContainer.setTranslationY(0);
} else {
    panelTitleContainer.setTranslationY(svMain.getScrollY() - stackHeight);
}
Другие вопросы по тегам