我是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>
答案 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的过滤器更有效地计算具有简单渐变的简单形状。