2012-06-13 194 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