изменить скроллер flex spark для прокрутки по страницам с замедлением

Я изменил скин скроллера для своего VScrollBar согласно отличной статье Стивена Шонгрундена http://flexponential.com/2009/10/09/change-the-position-of-the-scroll-bars-in-a-spark-list/ так что есть только кнопки вверх и вниз, без полосы прокрутки.

Теперь я хочу изменить поведение скроллера, чтобы он прокручивал одну страницу за клик. Еще лучше, я бы хотел, чтобы прокрутка анимировалась с замедлением, т.е. не переходила со страницы на страницу, а прокручивалась с анимацией.

Документация для ScrollBarBase http://www.flex-component.com/asdoc/kcdualslider/spark/components/supportClasses/ScrollBarBase.html предлагает ряд методов, которые должны предоставить средства для достижения этого, но я не могу найти примеров того, как использовать эти отличные методы. и свойства:

animatePaging(newValue:Number, pageSize:Number): 
  Animates the operation to move to newValue.

button_buttonDownHandler(event:Event): 
  Handles a click on the increment or decrement button      

button_buttonUpHandler(event:Event): 
  Handles releasing the increment or decrement button

decrementButton:Button
  An optional skin part that defines a button that, when pressed, steps the scrollbar up.

incrementButton:Button
  An optional skin part that defines a button that, when pressed, steps the scrollbar down.

Я подозреваю, что мне нужно прервать обработчики button_buttonUp/DownHandler для decrementButton и incrementButton и вызвать animatePaging, но я действительно понятия не имею, как это сделать. Эти искровые скины действительно остаются для меня довольно загадочными, несмотря на то, что я написал тонны AS3 и успешно модифицировал довольно много скинов.

Ждем любой информации!

Спасибо!


person andrew    schedule 30.05.2012    source источник


Ответы (1)


Я нашел решение своего вопроса.

Мне нужно было расширить класс VScrollBar. Как только я это сделал, было просто переопределить button_buttonDown/UpHandlers.

Расширив класс VScrollBar, в своем скине я заменил

<my_namespace:CustomVScrollBar for  <s:VScrollBar

Вот суть моего CustomVScrollBar. Я использую gs.TweenLite, но вы можете использовать любой твинер для анимации.

package my_package {

    import flash.events.Event;
    import gs.TweenLite;
    import spark.components.VScrollBar;



    public class CustomVScrollBarextends VScrollBar
    {

        public function CustomVScrollBar()
        {
            super();
        }



        override protected function button_buttonDownHandler(event:Event):void {
            var valueTo:Number;
            if (event.target == incrementButton) {
                valueTo = Math.min(value+pageSize, maximum);
            } else if (event.target == decrementButton) {
                valueTo = Math.max(value-pageSize, minimum);
            }
            if (! isNaN(valueTo)) {
                TweenLite.to(this.viewport, .75, {verticalScrollPosition: valueTo});
            }
        }

        override protected function button_buttonUpHandler(event:Event):void {
            // 
            // nothing
        }

    }
}
person andrew    schedule 30.05.2012