2009-07-15 4 views
2


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

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

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

Пример
Ниже приведен снимок экрана отображения вопроса под рукой.

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

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

Главная Вопрос
Как сделать плавный скроллинг в ListField?

ответ

1

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

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

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

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

+0

Это имеет смысл.Один из вопросов, однако, означает, что это означает, что я запрещаю прокрутку на самом элементе ListField или я прокручиваю команду verticalfieldmanager, а затем пусть ListField получает свое событие прокрутки, чтобы элемент управления мог самостоятельно управлять собой (зная, какая строка выбрана ...)? – AtariPete

0

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

3

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

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