2

概述
我正在使用 listfield 类来垂直显示一组信息。该列表字段的每一行占据屏幕高度的 2/5。

因此,当滚动到下一个项目时(尤其是在显示部分被屏幕高度限制遮挡的项目时),整个滚动/聚焦动作非常跳跃。

我想通过在滚动/焦点操作之间实现平滑滚动来解决这种跳动。ListField 类可以做到这一点吗?

示例
下面是显示当前问题的屏幕截图。

替代文字
(来源:perkmobile.com

一旦用户向下滚动到 ListFieldTHREE 行,该行就会以非常跳跃的方式“滚动”到视图中,没有平滑滚动。我知道减小行高会缓解这个问题,但我不想那样做。

主要问题
如何在 ListField 中平滑滚动?

4

3 回答 3

3

据我所知,没有官方的 API 方法可以做到这一点,但可以通过巧妙地使用 NullField(Field.FOCUSABLE) 来伪造它,这就是有多少自定义 BlackBerry UI 实现了强制聚焦行为。

一种方法是从一个类中派生每个“列表项”,该类将可聚焦的 NullFields 与列表项本身的可见内容交错 - 这实际上将迫使滚动系统以较小的间隔“跳跃”,而不是由列表项之间的自然划分,并且具有不修改列表项内容的可见位置的附带好处。

于 2009-07-15T17:34:07.520 回答
1

假设您希望用户向下滚动 1 次“单击”轨迹球,然后突出显示下一个项目,但不是立即滚动跳转,而是平滑滚动以使新项目可见(例如在 Google 的 Gmail 应用程序中) BlackBerry),您必须推出自己的组件。

基本思想是继承 VerticalFieldManager,然后在滚动时(关闭 moveFocus 方法),您有一个单独的线程更新垂直位置变量,并使管理器多次无效。

该线程是必要的,因为如果您考虑一下,您正在驱动用户事件的动画 - 平滑滚动实际上是 BlackBerry 上的动画,因为它比触发它的事件持续时间更长。

我对细节有点模糊,这不是一件容易的事,所以希望这会有所帮助。

于 2009-07-16T14:43:52.890 回答
0

除非您想覆盖列表字段的绘制方式或创建自己的包装器,否则您将始终遇到此问题,这是因为滚动时每行始终可见。尝试使用 labelfield 代替。

于 2009-07-15T17:24:43.593 回答