我在尝试在列表渲染器中使用形状裁剪是否是一个好主意 - 并且发现一些非常老的错误仍然存在。
它只是一个表单中的List,其中BorderLayout作为CENTER组件。
我的自定义ListCellRenderer有一个带有bgPainter的样式,它使用使用GeneralPath创建的圆边形状应用剪裁。
在拉伸滚动之前点击将列表移动到表单的底部 - 我很久以前就报告了这一点 - 请参阅https://github.com/codenameone/codenameone/issues/1365
拖动超出列表的开头,将指针释放到表单的标题之上,显然不会导致指针启动 - 请参阅:
您可以使用一个比表单小的简单List来测试所有这些,并且它有一个绘制其背景的渲染器。
答案 0 :(得分:1)
看起来你正在调用setClip(Shape)而不考虑当前剪辑是什么。当你调用setClip()时,它将替换任何现有的剪辑,它不会形成交集。你必须自己组成交叉路口。我计划添加一个类似于clipShape(Shape)
的{{1}}方法,并将剪辑设置为当前剪辑与您提供的形状的交集。但在此之前,你必须自己组建交叉路口。
答案 1 :(得分:0)
它看起来像是形状裁剪和{{1}}方法的问题。
无论这个问题如何,我都不会这样做。
形状裁剪在性能方面非常昂贵,并且根据定义产生别名结果(与更精确的抗锯齿结果相反)。你最终会得到更慢的代码,这些代码看起来并不像其他做同样事情的方法那样精致,例如:图像边框,填充等。
答案 2 :(得分:0)
我们正在十字架上交谈。请忽略裁剪。
拉伸滚动中存在错误。
错误显示在所有列表实现和可滚动容器中。
当滚动仍然在进行时,当可以通过点击来拉伸拉伸滚动时,可滚动容器会以丑陋的方式运行,当客户区域比容器短时,内容会跳到容器的末端并保持在那里直到重新拖动。 此外,当在可滚动容器中点击组件并且拉伸滚动仍在进行中时,内容会快速捕捉并且错误的组件会做出反应。
请为此做些什么。