iPhone 上的 JavaFX - 应用阴影时 ListView 滚动延迟

JavaFX on iPhone - Laggy ListView scrolling when applying shadow

我正在 iOS 上使用 JavaFXPorts 开发应用程序。我有一个窗格,其中包含一个包含国家及其国旗的 ListView。当我在窗格上应用投影效果时,我注意到 ListView 滚动很慢。正如您从下面的视频中看到的,没有效果滚动非常流畅,而通过 CSS 应用效果时,滚动开始变得迟钝。我想保留阴影效果,因为它使应用程序更漂亮。所以非常感谢任何建议。

CSS 我使用的代码是:

-fx-effect: dropshadow( three-pass-box, rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1);

Video: Scrolling without shadow effect

Video: Scrolling with shadw effect (Laggy)

请注意,这是在 iPhone 6 运行 上进行的。 iPhone 5 个结果更差。

添加效果、css、过渡、自定义控件和其他通常在桌面上运行良好的复杂内容时,在移植到移动设备时可能会在性能方面造成很大损失。

效果

虽然效果使节点或窗格看起来很花哨,但它们对移动性能的负面影响最大。

尽量避免将它们应用于变化很大的节点,例如 ListView、TableView 或 ComboBox 控件上的单元格。

此外,如果您将它们应用于具有引用子项(ListView,...)的父项,则如果子项无效(滚动后或类似情况),父项(和效果)将一直呈现.

如果你真的需要这个父级的效果,尝试拆分父级和子级。

而不是:

parent (Pane with effect)
  |-- ListView

你可以这样做:

parent (StackPane without effect)
  |-- Pane (with effect)
  |-- ListView 

由于窗格不会有太大变化,您可以对其使用缓存。通常,缓存策略通过渲染节点的图像(具有效果的窗格)来工作,而不是重新重新创建节点和那个效果,所以这是一个快速的胜利:

parent (StackPane without effect)
  |-- Pane (with effect) and with Cache
  |-- ListView 

相反,不要在经常变化的节点上使用缓存(比如ListView)。

CSS

复杂CSS需要很长的CPU时间。尝试简化它。即使您可以删除整个 CSS 以进行快速测试。然后决定你可以使用或不可以使用什么。

也尝试用代码替换一些样式。

动画

动画也是如此:尽可能避免动画、过渡。

节点数和自定义控件

节点数量越多,性能越低,所以尽量保持在最低限度(用图片替换复杂内容,尽可能canvas)。

切换场景

手机屏幕更小,每个场景的内容都比桌面少。避免切换舞台或场景也很重要。而是使用不同的节点并在同一场景中替换它们。

Gluon Charm 使用 View nodes,以及一种在不同视图之间切换的简单方法:MobileApplication.getInstance().switchView("other view name")

图片

最后,当使用从互联网下载或从文件加载的图像时,缓存策略是必须的。看看 Gluon Charm Down.

提供的那些