【问题标题】:Blackberry - How to implement ListField Smooth Scrolling?Blackberry - 如何实现 ListField 平滑滚动?
【发布时间】:2009-07-15 17:06:49
【问题描述】:

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

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

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

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


(来源:perkmobile.com)

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

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

【问题讨论】:

    标签: java blackberry scroll listfield smooth-scrolling


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 这是有道理的。但是有一个问题,这是否意味着我禁用 ListField 本身的滚动,或者我滚动垂直字段管理器,然后让 ListField 接收其滚动事件,以便控件可以在内部相应地管理自身(知道选择了哪一行......)?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多