codenameone - 根据滚动隐藏和显示工具栏
问题描述
这个问题仅指代号一。
我需要使 Codename One Form 的工具栏移动,如本视频所示: https ://www.informatica-libera.net/videoLavoro/hideShowToolbarOnScrolling.mp4
可以看到,向上滚动会导致 Toolbar 逐渐消失,而向下滚动会导致 Toolbar 逐渐重新出现。
像https://stackoverflow.com/a/55856590这样的解决方案不适用,因为我不需要更改 Toolbar 的 UIID,但我需要在滚动过程中上下移动 Toolbar,以获得相同的效果显示在视频中。
解决方案
这是我们在工具栏的 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();
}
}
}
});
}
}
推荐阅读
- javascript - 为什么我的 if 语句将我的整数 I 保持在 2
- python - 如何修复缓冲区 dtype 不匹配,预期为“float32_t”但得到“双”
- php - 子菜单不复制 WordPress 下拉菜单中的样式
- python - Pandas:如何绘制 imdb 电影总预算与 pandas 中的单独类型?
- c# - 是否可以允许在派生类中实现抽象方法,但只能在基类中调用?
- javascript - JS 模块模式中的 AJAX
- c# - 如何复制数组?
- c# - 在 RouteAttribute 上访问自定义属性 DescriptionAttribute
- python - TensorFlow 最大化目标而不是最小化
- css - 如何更改下一页上的复选框颜色?