Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top