質問

概要
listfield クラスを使用して、一連の情報を垂直方向に表示しています。そのリストフィールドの各行は、画面の高さの 2/5 を占めます。

そのため、次の項目にスクロールするとき (特に、画面の高さの制約によって部分的に隠れた項目を表示するとき)、全体のスクロール/フォーカス アクションが非常に不安定になります。

スクロール/フォーカスアクション間のスムーズなスクロールを実装することで、この飛び飛びを修正したいと考えています。これはListFieldクラスで可能でしょうか?


以下は、当面の問題を示すスクリーンショットです。

alt text
(ソース: perkmobile.com)

ユーザーが ListFieldTHREE 行まで下にスクロールすると、この行は非常に飛び跳ねて表示され、スムーズなスクロールは行われません。行の高さを小さくするとこの問題が軽減されることはわかっていますが、そのようにはしたくありません。

主な質問
ListField でスムーズにスクロールするにはどうすればよいですか?

役に立ちましたか?

解決

ユーザーがトラックボールを 1 回「クリック」して下にスクロールすると、次の項目が強調表示されるという動作が必要だとします。ただし、すぐにスクロール ジャンプする代わりに、スムーズなスクロールで新しい項目が表示されます (Google の Gmail アプリのように) BlackBerry)、独自のコンポーネントをロールする必要があります。

基本的なアイデアは、VerticalFieldManager をサブクラス化し、スクロール (moveFocus メソッドをキーオフ) で、別のスレッドで垂直位置変数を更新し、マネージャーを複数回無効にすることです。

このスレッドが必要なのは、よく考えてみると、ユーザー イベントからアニメーションを駆動していることになるためです。スムーズ スクロールは、それをトリガーしたイベントよりも長く続くため、BlackBerry では実際にはアニメーションです。

詳細については少し曖昧で、これは実際には簡単なことではありませんが、これが少しでも役立つことを願っています。

他のヒント

私の知る限り、これを行う公式の API 方法はありませんが、NullField(Field.FOCUSABLE) を賢く使用することでおそらくごまかすことができます。NullField(Field.FOCUSABLE) は、多くのカスタム BlackBerry UI が強制フォーカス動作を実装している方法です。

1 つのアプローチは、フォーカス可能な NullField とリスト項目自体の表示コンテンツをインターレースするクラスから各「リスト項目」を派生させることです。これにより、基本的にスクロール システムは、指定された大きな間隔ではなく、より小さな間隔で「ジャンプ」することになります。リスト項目間の自然な分割により、リスト項目のコンテンツの表示位置を変更しないという副次的な利点があります。

リストフィールドの描画方法をオーバーライドしたり、独自のラッパーを作成したりしない限り、常にこの問題が発生します。これは、スクロール時に各行が常に表示されるためです。代わりに labelfield を使用してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top