Создать эффект удара для нижнего листа android studio - PullRequest
1 голос
/ 27 апреля 2020

с развернутым нижним листом. Мне бы хотелось, чтобы этот нижний лист создавал небольшой эффект выпуклости всякий раз, когда я хочу (когда я обновляю некоторые данные)

Что, по вашему мнению, будет наилучшей практикой? Играя с установленным атрибутом bottomomsheetpeeklayoutheight?

Я использую

private BottomSheetBehavior bottomSheetBehavior;

с

private NestedScrollView bottomSheetStoreResult;

Кто-нибудь, кто реализовал это в своем коде?

спасибо всем заранее! :)

1 Ответ

0 голосов
/ 27 апреля 2020

СТАРЫЙ ОТВЕТ - СМ. НИЖЕ

. .

Хорошо, я делаю это с обработчиками, я знаю, что это не всегда отличное решение для их использования, но здесь это для легкого режима и длится 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);
                }
            });

Вы можете настроить задержки, и это немного чище :) наслаждайтесь!

...