2013-05-10 29 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