【问题标题】:A VBox with only one rounded corner and gradient background一个只有一个圆角和渐变背景的 VBox
【发布时间】:2010-12-03 19:40:03
【问题描述】:

我正在使用 Flex 3.4 SDK。

我正在尝试以编程方式(是的,必须是这种方式)样式/蒙皮一个 VBox,以便它的右上角是圆形的,并且它得到一个两种颜色的渐变背景。

修改我在周围找到的示例能够完成两种效果(角落和背景),但只能分别完成:

不是所有圆角的VBox:http://livedocs.adobe.com/flex/3/html/help.html?content=skinning_6.html

渐变背景的VBox:http://butterfliesandbugs.wordpress.com/2007/06/08/generic-background-gradient-for-containers/

但我需要做的是同时应用两者。到目前为止,我所有的编码尝试都无声无息地失败了。

有人知道如何正确执行此操作吗?

【问题讨论】:

    标签: apache-flex actionscript-3 actionscript flex3


    【解决方案1】:

    我的博客上有一篇关于如何制作这个精确组件的帖子Here

    您创建一个基本的自定义 MXML 组件(在本例中为扩展 VBox)。您指定一个程序化皮肤,这是应用斜角和渐变的地方。

    程序化皮肤在 updateDisplayList 函数中完成所有绘制。

    这是部分代码(其余在我的博客上,附有演示)

       var g:Graphics = graphics;
       var cn:Number = this.getStyle("cornerRadius");
       var crtl:Number = this.getStyle("cornerRadiusTopLeft") > 0 ? this.getStyle("cornerRadiusTopLeft") : cn;
       var crtr:Number = this.getStyle("cornerRadiusTopRight") > 0 ? this.getStyle("cornerRadiusTopRight") : cn;
       var crbl:Number = this.getStyle("cornerRadiusBottomLeft") > 0 ? this.getStyle("cornerRadiusBottomLeft") : cn;
       var crbr:Number = this.getStyle("cornerRadiusBottomRight") > 0 ? this.getStyle("cornerRadiusBottomRight") : cn;
       var gradFrom:Number = this.getStyle("gradientFrom");
       var gradTo:Number = this.getStyle("gradientTo");
    
       var b:EdgeMetrics = borderMetrics;
       var w:Number = unscaledWidth - b.left - b.right;
       var h:Number = unscaledHeight - b.top - b.bottom;
       var m:Matrix = verticalGradientMatrix(0, 0, w, h);
    
       g.clear();
       g.beginGradientFill("linear", [gradFrom, gradTo], [1, 1], [0, 255], m);
       g.lineStyle(1,borderColor,1,true,LineScaleMode.NORMAL,CapsStyle.ROUND,JointStyle.ROUND);
       GraphicsUtil.drawRoundRectComplex(g, b.left, b.top, w, h, crtl, crtr, crbl, crbr);
       g.endFill();
      }
    

    如需演示,请查看Here。希望这会有所帮助。

    【讨论】:

    • 非常感谢! :) 我从来没有使用过 GraphicsUtil,似乎是什么伎俩。
    • 您不需要 GraphicsUtil 类。 “drawRoundRectComplex”是图形对象的一个​​记录不充分的特性。 livedocs.adobe.com/flex/3/html/…
    • 好点 - 有时 Adob​​e 提供了太多的方法来做某事。这是我的一个旧项目中的一些代码——我发誓我现在会知道的更好! - Casp
    【解决方案2】:

    按照第二个链接中的步骤进行操作,但您应该能够使用“drawRoundRectComplex”而不是使用“drawRect”。不过,您可能需要使用一些矩阵设置。我好像记得有一些问题。

    另一种选择是使用degrafa。可能会有一点学习曲线,但它功能强大并且可以做到这一点。

    【讨论】:

    • 我肯定会在这里选择 degrafa
    • 谢谢,好像就是这样,类似于 CapsNZ 的解决方案。我知道degrafa。尽管它似乎使事情变得更容易,但我不想使用它。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    相关资源
    最近更新 更多