【问题标题】:JavaFX on iPhone - Laggy ListView scrolling when applying shadowiPhone上的JavaFX - 应用阴影时ListView滚动滞后
【发布时间】:2016-06-29 16:46:56
【问题描述】:

我正在使用 JavaFXPorts 在 iOS 上开发应用程序。我有一个窗格,其中包含一个带有国家及其标志的 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 上的结果要差得多。

【问题讨论】:

  • 对移动设备的影响会对性能产生负面影响,因此建议尽可能避免它们。我猜你已经在为图像使用缓存技术了。您看过50 States 示例吗?
  • @JoséPereda 是的,我前段时间见过。我正要尝试延迟滚动的魅力列表视图原因,但意外地发现这是产生问题的阴影效果。您是否认为将 listview 替换为 charm one 可能会解决阴影效果的问题。就我而言,原因不是列表视图本身,而是对外部窗格的影响
  • 正如我所说,效果对性能不利,无论您使用哪种控件,但有一些实验性选项可以更好地与 CharmListView 配合使用。同样,考虑其他替代效果(也许从外部修改图像?)
  • @JoséPereda 是的,我通过在标志图像本身上应用阴影来使用它。但在上述情况下,我们谈论的是面板上的阴影而不是图像。老实说,我很惊讶为什么它滚动不顺畅,因为外部窗格保持静态,只有列表视图中的内容发生变化。
  • 我没有检查过,但是每当您滚动时,窗格可能会失效(因为它的内容已更改),并重新呈现。您可以尝试在 listView 之间添加另一个容器,这个没有效果吗?

标签: css javafx scroll shadow javafxports


【解决方案1】:

当添加效果、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 以进行快速测试。然后决定你可以使用或不可以使用什么。

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

动画

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

节点和自定义控件的数量

节点数越多,性能越低,因此尽量将其保持在最低限度(尽可能用图像、画布替换复杂的内容)。

切换场景

移动设备屏幕更小,与桌面设备相比,每个场景的内容更少。避免切换阶段或场景也很重要。而是使用不同的节点并在同一场景中替换它们。

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

图片

最后,当使用从 Internet 下载或从文件加载的图像时,缓存策略是必须的。看看 Gluon Charm Down 提供的那些。

【讨论】:

  • 分离父母和孩子完成了这项工作。我按照您的建议添加了另一个窗格并对其应用阴影效果,而不是直接在 ListView 上应用它。曾几何时,我打开了该节点的缓存,一切都开始像魅力一样工作。平滑快速的滚动:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多