Blackberry - Как реализовать плавную прокрутку ListField? - PullRequest
2 голосов
/ 15 июля 2009

Обзор
Я использую класс listfield для отображения набора информации по вертикали. Каждая строка этого списка занимает 2/5 высоты экрана.

Таким образом, при прокрутке к следующему элементу (особенно при отображении элемента, частично скрытого из-за ограничений высоты экрана), все действие прокрутки / фокуса очень нервное.

Я бы хотел исправить эту скачок, реализовав плавную прокрутку между действиями прокрутки / фокусировки. Возможно ли это с помощью класса ListField?

Пример
Ниже приведен скриншот с изображением проблемы.

alt text
(источник: perkmobile.com )

Как только пользователь прокручивает вниз до строки ListFieldTHREE, эта строка «прокручивается» в поле зрения очень нервно, без плавной прокрутки. Я знаю, что уменьшение высоты строки уменьшит эту проблему, но я не хочу идти по этому пути.

Основной вопрос
Как мне сделать плавную прокрутку в ListField?

Ответы [ 3 ]

3 голосов
/ 15 июля 2009

Насколько мне известно, официального API-способа для этого не существует, но его, вероятно, можно избежать путем умного использования NullField (Field.FOCUSABLE), который заключается в том, как много пользовательских интерфейсов BlackBerry реализуют поведение принудительной фокусировки. ,

Один из подходов заключается в извлечении каждого «элемента списка» из класса, который чередует фокусируемые NullFields с видимым содержимым самого элемента списка - это по существу заставит систему прокрутки «прыгать» с меньшими интервалами, а не с большими интервалы, продиктованные естественным делением между элементами списка, и будут иметь побочное преимущество, не изменяя видимое расположение содержимого элемента списка.

1 голос
/ 16 июля 2009

Предполагая, что вам нужно поведение, которое пользователь прокручивает вниз на 1 «щелчок» трекбола, а затем выделяется следующий элемент, но вместо немедленного прыжка с прокруткой вы получаете плавную прокрутку, чтобы сделать новый элемент видимым (как в Google Gmail приложение для BlackBerry), вам придется свернуть свой собственный компонент.

Основная идея заключается в создании подкласса VerticalFieldManager, затем при прокрутке (отключите метод moveFocus) у вас есть отдельный поток, обновляющий переменную вертикальной позиции, и несколько раз лишающий законной силы менеджер.

Поток необходим, потому что если вы думаете об этом, вы выводите анимацию из пользовательского события - плавная прокрутка на самом деле является анимацией на BlackBerry, поскольку она длится дольше, чем событие, которое ее вызвало.

Я был немного расплывчат в деталях, и это не так-то просто сделать, так что, надеюсь, это немного поможет.

0 голосов
/ 15 июля 2009

, если вы не хотите переопределить способ рисования поля списка или создать свою собственную оболочку, у вас всегда будет эта проблема, потому что каждая строка всегда видна при прокрутке. Попробуйте вместо этого использовать labelfield.

...