СТАРЫЙ ОТВЕТ - СМ. НИЖЕ
. .
Хорошо, я делаю это с обработчиками, я знаю, что это не всегда отличное решение для их использования, но здесь это для легкого режима и длится 1 секунду.
Но Это работая так, как я ожидал , что является самым важным!
Я все еще хотел бы услышать от вас, ребята, если у вас есть лучшее решение:
сначала я использовал getViewTreeObserver () в onCreate (), чтобы получить peekheight моего нижнего листа.
bottomSheetPeekLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
bottomSheetPeekLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
peekHeight = bottomSheetPeekLayout.getHeight();
}
});
затем в сетевом результате я просто использовал setPeekHeight, так как есть установить анимацию на true опция доступна:
final Handler h1 = new Handler();
h1.postDelayed(new Runnable() {
@Override
public void run() {
h1.removeCallbacksAndMessages(this);
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED){
bottomSheetBehavior.setPeekHeight(peekHeight*3, true);
final Handler h2 = new Handler();
h2.postDelayed(new Runnable() {
@Override
public void run() {
h2.removeCallbacksAndMessages(this);
bottomSheetBehavior.setPeekHeight(peekHeight, true);
}
}, 400);
}
}
}, 600);
. .
ОБНОВЛЕНИЕ
. .
Поскольку использование собственной продолжительности было очень плохой идеей, я решил использовать метод animate (). Это более плавный и приятный вид, чем в ответе вышеупомянутого обработчика.
Если вы хотите его использовать, убедитесь, что ваш нижний лист достаточно высок, чтобы его можно было перевести, не создавая пустое пространство внизу во время анимация.
используйте это:
bottomSheet.animate()
.translationYBy(-250)
.setDuration(300)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
bottomSheet.animate()
.translationY(0)
.setDuration(300);
}
});
Вы можете настроить задержки, и это немного чище :) наслаждайтесь!