我在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代码替换它们。
答案 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.height
和track.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;
}
}