當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