Blackberry - 如何实现ListField Smooth Scrolling?

时间:2009-07-15 17:06:49

标签: java blackberry scroll listfield smooth-scrolling

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

因此,当滚动到下一个项目时(特别是在显示由于屏幕高度的约束而部分遮挡的项目时),整个滚动/焦点动作非常跳跃。

我想通过在滚动/焦点动作之间实现平滑滚动来解决这种跳跃问题。这可以用ListField类吗?

示例
以下是显示手头问题的屏幕截图。

alt text
(来源:perkmobile.com

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

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

3 个答案:

答案 0 :(得分:3)

据我所知,目前没有正式的API方法,但可以通过巧妙使用NullField(Field.FOCUSABLE)来捏造,这是多少自定义BlackBerry UI实现强制焦点行为。

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

答案 1 :(得分:1)

假设您想要用户向下滚动的行为1'点击'轨迹球,然后突出显示下一个项目,而不是立即滚动跳转,您可以获得平滑滚动以使新项目可见(如Google的适用于BlackBerry的Gmail应用程序,您必须使用自己的组件。

基本思想是将VerticalFieldManager子类化,然后在滚动(关闭moveFocus方法的键)上,你有一个单独的Thread更新垂直位置变量,并使管理器多次失效。

线程是必要的,因为如果你考虑它,你就是在用户事件中驱动动画 - 平滑滚动实际上是黑莓手机上的动画,因为它比触发它的事件持续时间更长。

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

答案 2 :(得分:0)

除非您想要覆盖listfield绘制的方式或创建自己的包装器,否则您将始终遇到此问题,这是因为滚动时每条线始终可见。请尝试使用labelfield。