代码之家  ›  专栏  ›  技术社区  ›  AtariPete

黑莓-如何实现ListField平滑滚动?

  •  2
  • AtariPete  · 技术社区  · 7 年前

    概述
    我使用listfield类垂直显示一组信息。该列表字段的每一行占据屏幕高度的五分之二。

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

    我想通过在滚动/聚焦动作之间实现平滑滚动来修复这种跳跃。ListField类可以这样做吗?

    实例

    alt text
    (来源: perkmobile.com )

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

    主要问题
    如何在列表字段中平滑滚动?

    3 回复  |  直到 7 年前
        1
  •  3
  •   Andrey Butov    17 年前

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

    一种方法是从一个类派生每个“列表项”,该类将可聚焦的空字段与列表项本身的可见内容交织在一起——这本质上会迫使滚动系统以较小的间隔“跳转”,而不是列表项之间自然划分的大间隔,这样做的副作用是不修改列表项内容的可见位置。

        2
  •  1
  •   Anthony Rizk    17 年前

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

    该线程是必要的,因为如果你想一想,你正在驱动一个用户事件的动画——平滑滚动实际上是黑莓手机上的一个动画,因为它比触发它的事件持续时间更长。

    我在细节上有点含糊,这不是一件容易的事,所以希望这能有所帮助。

        3
  •  0
  •   Russ Bradberry    17 年前

    除非您想覆盖listfield如何绘制或创建自己的包装器,否则您将始终存在此问题,这是因为滚动时每一行始终可见。试着改用labelfield。

    推荐文章