2013-05-10 31 views
1

我有一个简单的画布:禁用帆布具有不同的形状使

<mx:Canvas 
    id="can" 
    backgroundColor="#464343" 
    x="32" 
    y="33" 
    width="45" 
    height="60" 
    cornerRadius="8" 
    borderStyle="solid" 
    borderThickness="0" 
    click="canvas1_clickHandler(event)" 
/> 

启用后的角落被切断 但是当画布禁用所迷离面积与鲨鱼角落偷工减料之外。 是否可以减少模糊?

其他信息应用背景是黑色的 - 因为有模糊的颜色是白色,以及

回答

1

Container类像Canvas被禁用,绘制一个矩形的容器对象的顶部白色背景模糊不可见。正如你所看到的,这个矩形不遵守容器的cornerRadius风格。为了解决这个问题,你可以自定义Canvas类,将履行圆角半径(见下文)。

其他一些选项是摆弄disabledBackgroundColordisabledOverlayAlpha样式,设置颜色和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); 
      } 
     } 
    } 
} 
+0

感谢,该解决方案的工作正是我想 – 2013-05-13 07:38:19