0

Steven Shongrunden の優れた記事http://flexponential.com/2009/10/09/ching-the-position-of-the-scroll-bars-in-a-spark-list/に従って、VScrollBar のスクローラー スキンを変更しました。上下ボタンのみで、スクロールバーはありません。

ここで、クリックごとに 1 ページスクロールするように、スクローラーの動作を変更したいと考えています。さらに良いことに、スクロールをイージングでアニメーション化したいと思います。つまり、ページからページへジャンプするのではなく、アニメーションでスクロールします。

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.

私の直感では、decrementButton と incrementButton の button_buttonUp/DownHandlers を中断して animatePaging を呼び出す必要があると思いますが、これを行う方法がまったくわかりません。大量の AS3 を作成し、かなりの数のスキンの修正に成功したにもかかわらず、これらのスパーク スキンは、私にとって本当に不思議なままです。

どんな洞察も楽しみにしています!

ありがとう!

4

1 に答える 1

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
        }

    }
}
于 2012-05-30T15:40:06.497 に答える