当Container
类像Canvas
被禁用,绘制一个矩形的容器对象的顶部白色背景模糊不可见。正如你所看到的,这个矩形不遵守容器的cornerRadius
风格。为了解决这个问题,你可以自定义Canvas
类,将履行圆角半径(见下文)。
其他一些选项是摆弄disabledBackgroundColor
和disabledOverlayAlpha
样式,设置颜色和alpha,所以这个问题的效果不太明显。
这是CustomCanvas
类,它覆盖了Container
类中的行为,并将其绘制为圆角矩形而非常规矩形。下面的代码是从原始方法复制并粘贴的,只需稍作修改即可绘制圆角矩形。
package
{
import mx.containers.Canvas;
import mx.core.EdgeMetrics;
import mx.core.mx_internal;
use namespace mx_internal;
public class CustomCanvas extends Canvas
{
public function CustomCanvas()
{
super();
}
override public function validateDisplayList():void
{
super.validateDisplayList();
if (blocker)
{
var vm:EdgeMetrics = viewMetrics;
var bgColor:Object = enabled ?
null :
getStyle("backgroundDisabledColor");
if (bgColor === null || isNaN(Number(bgColor)))
bgColor = getStyle("backgroundColor");
if (bgColor === null || isNaN(Number(bgColor)))
bgColor = 0xFFFFFF;
var blockerAlpha:Number = getStyle("disabledOverlayAlpha");
if (isNaN(blockerAlpha))
blockerAlpha = 0.6;
blocker.x = vm.left;
blocker.y = vm.top;
var widthToBlock:Number = unscaledWidth - (vm.left + vm.right);
var heightToBlock:Number = unscaledHeight - (vm.top + vm.bottom);
blocker.graphics.clear();
blocker.graphics.beginFill(uint(bgColor), blockerAlpha);
// multiply *2 because that's what Container::fillOverlay() does
var radius:Number = getStyle("cornerRadius")*2;
blocker.graphics.drawRoundRect(0,0,widthToBlock, heightToBlock, radius, radius);
blocker.graphics.endFill();
// Blocker must be in front of everything
rawChildren.setChildIndex(blocker, rawChildren.numChildren - 1);
}
}
}
}
感谢,该解决方案的工作正是我想 – 2013-05-13 07:38:19