Flex 4:如何应用RectangularDropShadow?

时间:2013-08-21 07:18:22

标签: flex

我是Flex的新手,所以有一些我不习惯的事情。我在RectangularDropShadow MXML组件的Declarations标记中添加了Rect。它没有显示任何内容,我确信我应该做些什么来将它应用到Rect

<?xml version="1.0" encoding="utf-8"?>
<s:Rect xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx"
        height="314" width="478">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:RectangularDropShadow id="cardAreaShadow"                                
                                 alpha="0.4"
                                 distance="10"
                                 angle="45"
                                 color="#000000" />
    </fx:Declarations>
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
</s:Rect>

1 个答案:

答案 0 :(得分:2)

Declarations块仅用于声明对象。所以你在这里做的是创建RectangularDropShadow的实例而不将其添加到displaylist,这当然是你无法看到它的原因。

另一件要知道的事情是RectangularDropShadow有点奇怪:它不是一个过滤器,而是一个独立的DisplayObject。为清楚起见:过滤器是可以应用于现有DisplayObject的“视觉效果”。而RectangularDropShadow实际上只是一个矩形形状,并且应用了一些渐变。

另外,因为它是一个DisplayObject而且Rect不是容器,所以您不能简单地删除Declarations标记并期望它能够正常工作。你必须将两个对象放在一起,如下所示:

<s:RectangularDropShadow id="cardAreaShadow" height="314" width="478"
                         alpha="0.4" distance="10" angle="45" color="#000000" />

<s:Rect height="314" width="478">
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
</s:Rect>

另一种方法是简单地将DropShadowFilter应用于Rect,而不是使用RectangularDropShadow

<s:Rect height="314" width="478">
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
    <s:filters>
        <s:DropShadowFilter alpha="0.4" distance="10" angle="45" color="#000000" />
    </s:filters>
</s:Rect>

如果我们有过滤器,那么为什么我们需要RectangularDropShadow
原因是性能:可以比应用于任意现有DisplayObject的过滤器更有效地计算具有简单渐变的简单形状。