2012-06-13 264 views
0

上設置特定角半徑,如果在VBox上設置cornerRadius,則所有四個角落都會生效。如何將cornerRadius僅應用於左下角和右下角?默認情況下在VBox

+0

我懷疑你將不得不擴展組件來做到這一點;我不太確定它是如何實施的。如果你使用Flex 4,您可以使用帶有自定義外觀的BorderContainer來完成此操作。 – JeffryHouser

回答

2

試試這個: - 修改上面的代碼是這樣的(代碼由 - user1367714)

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <local:stackOverflowCornerRadious x="50" y="50" width="200" height="200"/> 
</s:Application> 

產品類別: - stackOverflowCornerRadious

package 
{ 
    import flash.display.Sprite; 

    import mx.containers.Box; 
    import mx.containers.VBox; 
    import mx.utils.GraphicsUtil; 

    import spark.primitives.Rect; 

    public class stackOverflowCornerRadious extends VBox 
    { 
     public function stackOverflowCornerRadious() 
     { 
      super(); 
     } 

     override protected function updateDisplayList(unscaledWidth:Number, 
                 unscaledHeight:Number):void 
     { 

      super.updateDisplayList(unscaledWidth, unscaledHeight); 

      graphics.clear(); 
      graphics.beginFill(0x00FF00); 
      GraphicsUtil.drawRoundRectComplex(graphics,0,0,unscaledWidth,unscaledHeight,0,0,10,10) 
      graphics.endFill(); 

     } 


    } 
} 
+0

@Mashesh這似乎不起作用 – jason

+0

請發現我修改過的代碼已經從MXML標籤中刪除了backgroundColor屬性。同樣可以通過添加setter和getter屬性並添加您定義的顏色來發送。 –

+0

@Mashesh,謝謝,它現在有效 – jason

5

延長垂直框部件和如下面提到的updateDisplayList重寫方法: -

override protected function updateDisplayList(unscaledWidth:Number, 
     unscaledHeight:Number):void 
{ 

    super.updateDisplayList(unscaledWidth, unscaledHeight); 

    var cornerRadius:Number = getStyle("cornerRadius"); 
    var backgroundColor:int = getStyle("backgroundColor"); 
    var backgroundAlpha:Number = getStyle("backgroundAlpha"); 
    graphics.clear(); 

    // Background 
    drawRoundRect(0, 0, unscaledWidth, unscaledHeight, 
     {tl: 0, tr: 0, bl: cornerRadius, br: cornerRadius}, 
     backgroundColor, backgroundAlpha); 


} 
+0

謝謝你回答這個問題,它似乎不起作用。而drawRoundRect()有6個參數,這裏有7個參數。 – jason

2
在flex3

,我必須用來代替延伸垂直框的borderskin。但我建議你去flex4(我的意見)。

============================================== ================================

在FLEX4,

你必須使用皮膚類,並且s:Rect有一個屬性,您可以在其中爲所有四個角應用不同的角半徑。

退房此鏈接:

http://blog.flexexamples.com/2009/10/11/setting-a-corner-radius-on-individual-corners-on-a-rect-in-flex-4/

你可以用與使用BorderContainer垂直佈局。

VGroup也有作爲垂直框的,但不支持剝皮。(我的意思是沒有定義skinClass屬性)

<s:VGroup skinClass=""/>----not defined 
<s:BorderContainer skinClass="bcSkin"/>----defined, apply custom skin 

SO被使用BorderContainer GUD 1與垂直佈局。

感謝

ANKUR