我正在开发一个UI项目,该项目要求自动调整大小按钮(基于标签长度)具有键盘或控制器焦点的焦点指示图形。这个图形显然必须与您想象的父级一致。
这会导致问题;父剪辑是9sliced,并且切片不会落到此剪辑的子Sprites / MovieClips。焦点指示器必须是可访问的属性,因为它必须能够打开或关闭。
目前唯一可以成像的解决方案是scale9Grid的极其程序化的重新实现,其中我将焦点指示器分成9并在父宽度/高度/ scaleX / scaleY改变时改变9个部分的属性。这也意味着当该按钮聚焦时打开和关闭所有9个部分
还有比这更好的方法吗?
答案 0 :(得分:1)
我建议您使用方法AppButton
创建一些包装类setSkin(skin:MovieClip)
(或者您可能已经拥有一个,因为您有一些通过标签功能调整大小)(其中skin是您的MovieClip
({1}}和width
覆盖了setter,因此你可以在方法height
中实现皮肤大小调整逻辑,每次调整宽度或高度都会被调整。
皮肤可能很复杂 - 与儿童中的其他影片剪辑(在您的情况下为焦点边框),因此不要将scale9Grid用于孔皮肤,但是将尺寸直接设置为具有scale9grid的子项以及< / em>,因此您的arrange()
方法可以是这样的:
arrange
在项目中为按钮外观制作一种外观格式也是值得的,因此您可以为所有按钮使用一个包装。
稍后您可以为此private function arrange():void
{
var child:DisplayObject;
for(var i:int = 0; i < numChildren; i++)
{
child = getChildAt(i);
child.width = width;
child.height = height;
}
}
添加更多功能 - 切换鼠标事件视图状态,设置文本标签,动画皮肤等。
这种方法适用于我多年,我们有基类AppButton
和ToggleButton
类,并在每个项目中使用自定义皮肤解析和排列扩展它们。