如何在动作脚本中创建自定义高度的fl.controls.Slider皮肤?

时间:2012-04-18 10:23:55

标签: actionscript flash-cs5 skin

我在Adobe Flash CS5.5的图形编辑器中创建了一个名为customSliderTrack的皮肤。此Slider现在位于FLA文件的“库”中。

我可以使用以下代码应用此皮肤:

var cls:Class = getDefinitionByName("CustomSliderTrack") as Class;
var tmpTrack:Sprite = new cls();
slider.setStyle("sliderTrackSkin",tmpTrack);

然而,由于FLA文件的二进制特性以及不同版本的Adobe Flash缺乏兼容性,我需要在Actionscript中实现它。

我知道cls是一个MovieClip对象但是我不能用new MovieClip()获得相同的结果。我认为这可能与图形编辑器中的虚线有关(我修改了默认的SliderTrack_skin)。我还没有找到他们的意思以及如何用Actionscript代码替换它们。

2 个答案:

答案 0 :(得分:0)

根据您的跟踪资产的复杂程度,您可以使用绘图API完成此操作:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html

一个非常简单的例子是:

var track:Sprite = new Sprite();
track.graphics.lineStyle(2, 0xcccccc);
track.graphics.beginFill(0x000000, 1);
track.graphics.drawRect(0, 0, 400, 20);
track.graphics.endFill();
track.scale9Grid = new Rectangle(2, 2, 396, 16);
slider.setStyle("sliderTrackSkin",track);

这会创建一个仅为黑色矩形的轨道,大小为400x20像素。您可以在代码中设置scale9grid以控制皮肤的缩放程度。在上面的示例中,矩形的边框不会缩放,但内部的黑色矩形将会缩放。可以使用绘图API中的方法进行试验。

如果您需要更复杂的资产,我建议您加载图片,然后将其传递给slider.setStyle。

答案 1 :(得分:0)

setStyle会自动设置track.heighttrack.width。如果track.height slider.height属性似乎没有任何效果。要解决此问题,只需将track.height设置为最佳值。

访问track扩展Slider类并覆盖configUI函数:

public class CustomSlider extends Slider
{
    override protected function configUI():void
    {
        // Call configUI of Slider
        super.configUI();
        // The sprite that will contain the track
        var t:Sprite = new Sprite();
        // Draw the content into the sprite
        t.graphics.beginFill(0x000000, 0.1);
        t.graphics.drawRect(0, -15, width, 30);
        t.graphics.endFill();
        // Set the Sprite to be the one used by the Slider
        this.setStyle("sliderTrackSkin",t);
        // Reset the height to the value that it should be
        track.height = 30;
    }
}