概观 我正在使用listfield类来垂直显示一组信息。该列表字段的每一行占据屏幕高度的2/5。
这样,当滚动到下一个项目时(特别是当显示由于屏幕高度的约束而部分遮挡的项目时),整个滚动/焦点动作非常跳跃。
我想通过在滚动/焦点动作之间实现平滑滚动来解决这种跳跃问题。这可能与ListField类有关吗?
例 以下是显示手头问题的屏幕截图。
(来源:perkmobile.com)
一旦用户向下滚动到ListFieldTHREE行,此行将以非常跳跃的方式“滚动”到视图中,无法平滑滚动。我知道将行高调小会缓解这个问题,但我不想这样做。
主要问题 如何在ListField中进行平滑滚动?
假设您想要用户向下滚动的行为1'点击'跟踪球,然后突出显示下一个项目,但不是立即滚动跳转,您可以顺利滚动以使新项目可见(例如在谷歌的Gmail应用程序中黑莓),你将不得不推出自己的组件。
基本思想是将VerticalFieldManager子类化,然后在滚动(关闭moveFocus方法的键)上,您有一个单独的Thread更新垂直位置变量,并使管理器多次失效。
线程是必要的,因为如果你想一想,你正在用户事件驱动动画 - 平滑滚动实际上是黑莓手机上的动画,因为它比触发它的事件持续时间更长。
我对细节有点模糊,这不是一件容易的事情,所以希望这会有所帮助。
据我所知,目前还没有正式的API方法,但可以通过巧妙地使用NullField(Field.FOCUSABLE)来捏造,这就是有多少自定义BlackBerry UI实现强制焦点行为。
一种方法是从一个类中导出每个“列表项”,该类将可聚焦的NullField与列表项本身的可见内容交织在一起 - 这实际上会迫使滚动系统以较小的间隔“跳转”而不是由列表项之间的自然划分,并且具有不修改列表项的内容的可见定位的附带好处。
除非你想覆盖listfield绘制或创建自己的包装器的方式,否则你总会遇到这个问题,这是因为滚动时每条线总是可见的。尝试使用labelfield。