Codenameone 根据滚动显示隐藏和显示工具栏
这个问题只涉及代号1 我需要使一个代码名的工具栏移动,如本视频所示: 如您所见,向上滚动会导致工具栏逐渐消失,而向下滚动会导致工具栏逐渐重新出现Codenameone 根据滚动显示隐藏和显示工具栏,codenameone,Codenameone,这个问题只涉及代号1 我需要使一个代码名的工具栏移动,如本视频所示: 如您所见,向上滚动会导致工具栏逐渐消失,而向下滚动会导致工具栏逐渐重新出现 像这样的解决方案不适用,因为我不需要更改工具栏的UIID,但我需要在滚动期间上下移动工具栏,以获得视频中显示的相同效果 这是我们在whatsapp工具栏克隆应用程序中采用的方法,因为这正是whatsapp的行为。还有更多内容,但此块包含实现此功能的大部分逻辑: private void bindFolding(Container titleArea,
像这样的解决方案不适用,因为我不需要更改工具栏的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我们来回答问题。。。没问题;-)首选的与大小相关的方法被弃用,因为人们经常误用它们,所以我们希望向那里的开发人员发出强烈警告。当您将鼠标指向弃用警告时,应该在弃用文档中解释这一点。这种方法不会消失,因为没有真正的替代方法,如果真的有,那么距离现在还有很长的路要走。。。