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