Скрыть и показать панель инструментов в соответствии с прокруткой - PullRequest
1 голос
/ 26 апреля 2019

Этот вопрос относится только к кодовому имени 1.

Мне нужно, чтобы панель инструментов формы с кодовым именем перемещалась, как показано на этом видео: https://www.informatica -libera.net / videoLavoro / hideShowToolbarOnScrolling.mp4

Как видите, прокрутка вверх приводит к постепенному исчезновению панели инструментов, а прокрутка вниз вызывает постепенное повторное появление панели инструментов.

Такое решение, как https://stackoverflow.com/a/55856590, неприменимо, поскольку мне не нужно изменять UIID панели инструментов, но мне нужно перемещать панель инструментов вверх и вниз во время прокрутки, чтобы получить тот же эффект, что показан на видео.

1 Ответ

1 голос
/ 26 апреля 2019

Это подход, который мы использовали в приложении WhatsApp для клонирования панелей инструментов, поскольку именно так и работает WhatsApp. Это еще не все, но этот блок содержит большую часть логики, которая реализует это:

private void bindFolding(Container titleArea, int titleHeight, 
        Container... scrollables) {
    addPointerReleasedListener(e -> {
        if(titleArea.getHeight() != titleHeight && 
                    titleArea.getHeight() != 0) {
            if(titleHeight - titleArea.getHeight() > titleHeight / 2) {
                titleArea.setPreferredSize(null);
            } else {
                titleArea.setPreferredH(0);
            }
            titleArea.getParent().animateLayout(100);
        }
    });
    for(Container c : scrollables) {
        c.addScrollListener((scrollX, scrollY, oldscrollX,
            oldscrollY) -> {
            // special case for tensile drag
            if(scrollY <= 10) {
                titleArea.setPreferredSize(null);
                return;
            }
            int diff = oldscrollY - scrollY;
            if(diff > 0) {
                if(titleArea.getHeight() < titleHeight) {
                    titleArea.setPreferredH(Math.min(titleHeight, 
                        titleArea.getPreferredH() + diff));
                    titleArea.setHeight(titleArea.getPreferredH());
                    titleArea.getParent().revalidate();
                }
            } else {
                if(diff < 0) {
                    if(titleArea.getHeight() > 0) {
                        titleArea.setPreferredH(Math.max(0, 
                            titleArea.getPreferredH() + diff));
                        titleArea.setHeight(titleArea.getPreferredH());
                        titleArea.getParent().revalidate();
                    }

                }
            }
        });
    }
}
...