2009-07-15 14 views
2

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

このように、次の項目にスクロールすると(特に画面の高さの制約によって部分的に不明瞭な項目を表示する場合)、スクロール/フォーカス操作全体が非常に不安定になります。

スクロール/フォーカス操作のスムーズなスクロールを実装することで、この不安定さを修正したいと思います。これはListFieldクラスで可能ですか?以下は


手で問題を表示するスクリーンショットです。

alt text http://perkmobile.com/smooth_scroll.jpg

ListFieldTHREE行までユーザーがスクロールすると、この行は、非常にびくびくように視野にない滑らかなスクロールを「スクロールしない」です。私は、行の高さを小さくすることでこの問題を緩和することが分かっていますが、私はそのように行くことをやめません。

メイン質問
ListFieldで円滑なスクロールを行うにはどうすればよいですか?

答えて

1

ユーザーがスクロールしてトラックボールを1回クリックすると、次のアイテムがハイライト表示されますが、スクロールジャンプの代わりに円滑なスクロールで新しいアイテムが表示されますGoogleのBlackBerry用Gmailアプリ)では、独自のコンポーネントをロールバックする必要があります。

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

スレッドが必要なのは、ユーザーイベントのアニメーションをオフにしているからです。スムーズなスクロールは実際にはBlackBerryのアニメーションであり、トリガーしたイベントより長く続くためです。

私は詳細について少し曖昧でしたが、これは本当に簡単なことではありません。うまくいけば、これはちょっと役立ちます。

+0

これは意味があります。ただし、ListField自体をスクロールすることを無効にするか、verticalfieldmanagerをスクロールしてListFieldにスクロールイベントを受けさせて、コントロールが内部的にそれ自身を管理できるようにします(どの行が選択されているかを知る...)? – AtariPete

0

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

3

私が知る限り公式のAPI方法はありませんが、NullField(Field.FOCUSABLE)を巧みに使いこなすことができます。これは、カスタムBlackBerry UIが強制フォーカスを実装する回数です動作。

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

関連する問題