我正在编写一个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>
答案 0 :(得分:1)
我能想到的最简单的方法 这样做是为了包括所有可能的 s中的形状:分组然后管理 他们的可见标签取决于什么 用户选择的形状。在那儿 更好的方法吗?
是。物品渲染器需要尽可能轻。使用includeInLayout会更好一点,因为它只会将你需要的内容添加到显示列表中。
另外,如果我将组封装在一个 单独的MXML组件,我该怎么做 传播的状态 itemRenderer(说“悬停”)下来 管理的MXML组件 形状
我不太确定我理解这个问题。项呈示器是数据驱动的,因此它们的实例没有可靠的状态。渲染器实例可以在任何给定时间显示任何给定的数据项。传递给项呈示器的任何信息都应该通过它的数据项向下传递,否则您将在显示中遇到同步错误。