0

我是新手,Flex所以有些事情我不习惯。我在MXML 组件RectangularDropShadowDeclarations标签中添加了 。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>
4

1 回答 1

2

Declarations块仅用于声明对象。因此,您在这里所做的是创建一个实例RectangularDropShadow而不将其添加到显示列表中,这当然是您看不到它的原因。

要知道的另一件事是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>

另一种方法是简单地将 aDropShadowFilter应用于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 的过滤器相比,可以更有效地计算具有简单渐变的简单形状。

于 2013-08-21T07:41:46.023 回答