Codenameone 根据滚动显示隐藏和显示工具栏

Codenameone 根据滚动显示隐藏和显示工具栏,codenameone,Codenameone,这个问题只涉及代号1 我需要使一个代码名的工具栏移动,如本视频所示: 如您所见,向上滚动会导致工具栏逐渐消失,而向下滚动会导致工具栏逐渐重新出现 像这样的解决方案不适用,因为我不需要更改工具栏的UIID,但我需要在滚动期间上下移动工具栏,以获得视频中显示的相同效果 这是我们在whatsapp工具栏克隆应用程序中采用的方法,因为这正是whatsapp的行为。还有更多内容,但此块包含实现此功能的大部分逻辑: private void bindFolding(Container titleArea,

这个问题只涉及代号1

我需要使一个代码名的工具栏移动,如本视频所示:

如您所见,向上滚动会导致工具栏逐渐消失,而向下滚动会导致工具栏逐渐重新出现


像这样的解决方案不适用,因为我不需要更改工具栏的UIID,但我需要在滚动期间上下移动工具栏,以获得视频中显示的相同效果

这是我们在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();
                    }

                }
            }
        });
    }
}
private void bindpolding(容器标题ea、int titlelight、,
容器(可滚动){
addPointerReleasedListener(e->{
如果(titleArea.getHeight()!=titlewight&&
titleArea.getHeight()!=0){
if(titlelight-titleArea.getHeight()>titlelight/2){
titleArea.setPreferredSize(空);
}否则{
titleArea.setPreferredH(0);
}
titleArea.getParent().animateLayout(100);
}
});
for(容器c:可滚动){
c、 addScrollListener((scrollX、scrollY、oldscrollX、,
旧卷轴)->{
//拉伸阻力的特殊情况
如果(滚动0){
if(titleArea.getHeight()0){
titleArea.setPreferredH(数学最大值(0,
titleArea.getPreferredH()+diff));
titleArea.setHeight(titleArea.getPreferredH());
titleArea.getParent().revalidate();
}
}
}
});
}
}

您的代码非常有用,我根据自己的用例对其进行了调整。如果没有足够的可滚动内容,那么您建议的代码会产生一种奇怪的效果,而如果可滚动内容足够,则效果会很好。此外,拉伸阻力和状态栏会在特殊情况下产生问题。这就是为什么我创建了这个修改版本的代码,它有额外的检查,并防止在特殊情况下出现奇怪的效果,也许它会有用:我认为完整的代码中有解决方法,如果你有在线课程,你可以在那里看。是的,我有你所有的课程。。。但我试图编译Whatsapp克隆服务器的尝试总是失败。所有错误都与数据库有关。当我可以修改我的本地mysql服务器而不用担心损坏我正在使用的应用程序时,我会更好地控制这个问题。这只需要客户端代码,这样你就可以查看前端代码。如果我没记错的话,构造函数中应该有一些设置初始化逻辑的代码。@JAnton我们来回答问题。。。没问题;-)首选的与大小相关的方法被弃用,因为人们经常误用它们,所以我们希望向那里的开发人员发出强烈警告。当您将鼠标指向弃用警告时,应该在弃用文档中解释这一点。这种方法不会消失,因为没有真正的替代方法,如果真的有,那么距离现在还有很长的路要走。。。