0

我正在开发一个 UI 项目,该项目要求自动调整大小按钮(基于标签长度)具有用于键盘或控制器焦点的焦点指示器图形。正如您想象的那样,该图形显然必须与父级一起缩放。

这会导致问题;父剪辑是 9sliced,并且该切片不会落入此剪辑的子 Sprites/MovieClips。焦点指示器必须是可访问的属性,因为它必须能够打开或关闭。

目前,我可以想象的唯一解决方案是对 scale9Grid 的极其编程的重新实现,其中我将焦点指示器分成 9 个并在父宽度/高度/scaleX/scaleY 更改时更改 9 个部分的属性。这也意味着当该按钮被聚焦时打开和关闭所有 9 个部分

还有比这更好的方法吗?

4

1 回答 1

1

我建议你创建一些包装类AppButton(或者你可能已经有一个,因为你有一些通过标签功能调整大小的方法)setSkin(skin:MovieClip)(其中皮肤是你MovieClip从库中获得的)和覆盖的设置器widthand height,所以你可以在这里实现皮肤调整大小的逻辑arrange()每次更改宽度或高度时调用的方法。

皮肤可能很复杂 - 与儿童中的其他影片剪辑(在您的情况下为焦点边框),所以不要使用 scale9Grid 作为孔皮肤,但也可以使用 set scale9grid 直接为孩子设置大小,所以您的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- 在鼠标事件上切换视图状态、设置文本标签、动画皮肤等等。

这种方法为我工作了很多年,我们有基础ToggleButtonLabelButton extends ToggleButton类,并通过自定义皮肤解析和排列在每个项目中扩展它们。

于 2013-09-30T11:49:18.373 回答