此问题仅涉及代号One。
我需要像下面的视频所示那样移动一个具有代号的表单的工具栏: https://www.informatica-libera.net/videoLavoro/hideShowToolbarOnScrolling.mp4
如您所见,向上滚动导致工具栏逐渐消失,而向下滚动导致工具栏逐渐重新出现。
https://stackoverflow.com/a/55856590之类的解决方案不适用,因为我不需要更改工具栏的UIID,但是我需要在滚动过程中上下移动工具栏,以获得与视频。
答案 0 :(得分:1)
这是我们在工具栏的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();
}
}
}
});
}
}