交换spark ItemRenderer中的图形对象

时间:2011-01-17 20:56:19

标签: actionscript-3 flex itemrenderer

我正在编写一个s:ItemRenderer来在我的应用中呈现一些简单的图形组件。每个元素可以具有可以由用户选择的多个形状,即某个元素可以是正方形,或圆形,或星形,或其他任何形状。

我能想到的最简单的方法是在s:Group中包含所有可能的形状,然后根据用户选择的形状管理它们的可见标记。有没有更好的方法呢?

此外,如果我将组封装在单独的MXML组件中,如何将itemRenderer的状态(比如说“hovered”)向下传播到管理形状的MXML组件?

谢谢你!

˚F


编辑:这是一个代码片段,可以更好地解释这种情况。假设你想要显示三种类型的对象 - 下面的IR带有一个AS片段,它可以将3个对象中的2个变为false,但这对我来说似乎很难看。与此同时,我发现setCurrentState(stateName:String,playTransition:Boolean = true)将状态向下传播,以便解决。

<s:ItemRenderer>
<s:states>
    <s:State name="normal" />
    <s:State name="hovered" />
</s:states>
<s:Group width="100%">
    <s:Rect width="20" height="10" radiusX="3" radiusY="3">
        <s:stroke>
            <s:SolidColorStroke color="Black" weight="1" pixelHinting="true"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="red" />
        </s:fill>
    </s:Rect>
    <s:Rect id="square" width="10" height="10" radiusX="3" radiusY="3">
        <s:stroke>
            <s:SolidColorStroke color="Black" weight="1" pixelHinting="true"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="green"/>
        </s:fill>
    </s:Rect>
    <s:Ellipse id="circle" visible="true" width="10" height="10">
        <s:stroke>               
            <s:SolidColorStroke color="Black" pixelHinting="true" weight="1"/>     
        </s:stroke>          
        <s:fill>
            <s:SolidColor color.normal="yellow" color.hovered="0xCEDBEF"/>
        </s:fill>
    </s:Ellipse>
</s:Group>

1 个答案:

答案 0 :(得分:1)

  

我能想到的最简单的方法   这样做是为了包括所有可能的   s中的形状:分组然后管理   他们的可见标签取决于什么   用户选择的形状。在那儿   更好的方法吗?

是。物品渲染器需要尽可能轻。使用includeInLayout会更好一点,因为它只会将你需要的内容添加到显示列表中。

  

另外,如果我将组封装在一个   单独的MXML组件,我该怎么做   传播的状态   itemRenderer(说“悬停”)下来   管理的MXML组件   形状

我不太确定我理解这个问题。项呈示器是数据驱动的,因此它们的实例没有可靠的状态。渲染器实例可以在任何给定时间显示任何给定的数据项。传递给项呈示器的任何信息都应该通过它的数据项向下传递,否则您将在显示中遇到同步错误。