Я использую следующий код для переключения слайда/слайда для AppBarLayout
.ViewPropertyAnimator - анимация не произойдет в первый раз
public void showToolbar(boolean show) {
if (appBar == null) {
Log.e(TAG, "showToolbar: Toolbar is null");
return;
}
boolean toolbarShown = Utils.isViewVisible(appBar);
Log.d(TAG, "showToolbar: shown:" +shown);
boolean changed = (show != toolbarShown);
if (changed) {
if (show) {
Log.d(TAG, "showToolbar: showing");
appBar.setVisibility(View.VISIBLE);
appBar.animate()
.translationY(0)
.setInterpolator(new DecelerateInterpolator())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
appBar.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animator) { }
@Override
public void onAnimationCancel(Animator animator) { }
@Override
public void onAnimationRepeat(Animator animator) { }
})
.start();
} else {
Log.d(TAG, "showToolbar: hiding");
appBar.animate()
.translationY(-toolbar.getBottom())
.setInterpolator(new DecelerateInterpolator())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) { }
@Override
public void onAnimationEnd(Animator animator) {
appBar.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animator) { }
@Override
public void onAnimationRepeat(Animator animator) { }
})
.start();
}
} else {
Log.d(TAG, "showToolbar: no change");
}
}
анимация отлично работает в первый раз showToolbar(true)
за исключением называется, чтобы показать панель инструментов. Впервые представление отображается без анимации. Я просмотрел сайт и нашел похожие вопросы, но решения, похоже, не работают для меня.
Возможно, стоит отметить, что это происходит только тогда, когда мы хотим сначала спрятать appBar
. Я думаю, что, возможно, для анимации
Update 1:
public static boolean isViewVisible(View view) {
if (View.VISIBLE == view.getVisibility()) return true;
else return false;
}
Update 2
Я удалил isViewWithinScreenBounds()
метод, потому что проверка на самом деле не нужны.
Можете ли вы обеспечить выполнение следующих способов: Utils.isViewWithinScreenBounds, Utils.isViewVisible – Rzodkiewka
Может быть, попытаться поставить showToolbar (истинный) в методе onCreateOptionsMenu (..) – Rzodkiewka
@Rzodkiewka не работает. Без изменений. –