Apache flex 如何在flex HGroup中选择对象?
我有一个按钮,可以在每次单击时创建一个图像对象,并将该图像对象添加到Hgroup中。Hgroup可以包含几个图像对象。和另一个按钮来旋转对象 我想做的是:Apache flex 如何在flex HGroup中选择对象?,apache-flex,containers,Apache Flex,Containers,我有一个按钮,可以在每次单击时创建一个图像对象,并将该图像对象添加到Hgroup中。Hgroup可以包含几个图像对象。和另一个按钮来旋转对象 我想做的是: 可以选择一个对象 因此,每次单击“旋转”按钮时,选定对象可以围绕一个点旋转90度 还希望限制容器/组中添加的项目数。(必须有边框) 哪一个是我可以用于上述目的的最佳容器(列表、边框容器、Hgroup) 目前我的代码可以做什么: 1.在每次单击按钮时将图像对象添加到HGroup 2.我只能旋转H组中的第一项 我对flex很陌生。我不知道该怎么做
下面是一个示例,说明如何使用列表组件实现这一点。
首先创建一个模型对象,它将成为图像状态的表示模型
public class MyImage {
[Bindable]
public var source:Class;
[Bindable]
public var rotation:Number = 0;
}
现在使用自定义ItemRenderer创建列表。请注意,我使用了列表而不是数据组(正如我在评论中所建议的),因为您需要知道选择了哪个项目
<s:List id="imageList" dataProvider="{dp}"
x="216" y="53" width="319" height="367">
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer width="20" height="20">
<s:Image source="{data.source}" rotation="{data.rotation}"
horizontalCenter="0" verticalCenter="0"
scaleX=".5" scaleY=".5"/>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
<s:layout>
<s:HorizontalLayout/>
</s:layout>
</s:List>
<s:Button x="23" y="324" label="Add Image Object" click="addImage()"/>
<s:Button x="149" y="324" label="Rotate" click="rotateImage()"/>
并在单击按钮时添加一些项目:
[Embed(source='assets/CalendarIcon.png')] var myImg1:Class;
private function addImage():void {
var image:MyImage = new MyImage();
image.source = myImg1;
dp.addItem(image);
}
该列表将自动创建一个新的ItemRenderer,以在dataProvider中反映此新项目
现在,单击第二个按钮旋转它:
private function rotateImage():void {
if (imageList.selectedItem) imageList.selectedItem.rotation += 90;
}
更新所选
MyImage
实例的rotation
。绑定将完成其余的工作,并在ItemRenderer中旋转实际的图像。我将使用带有水平布局和自定义ItemRenderer的数据组(或列表)来显示图像,而不是将图像动态添加到HGroup。从那以后,你只需要操纵数据。嗨。。我想试试你说的话。但是,当涉及到重写项目呈现中某些必要的方法时,我总是不知所措。例如,我最近使用(面板作为我的自定义工具提示)做了一个自定义工具提示,我需要实现ItoolTip并重写一些方法,如getText和setText。那么,我必须重写任何方法,让这个自定义ItemRenderer也显示图像吗???虽然我在AdobeHelp中读了很多关于项目呈现的文章。我似乎仍然不明白这个概念,也不知道如何使用项目渲染器。你能解释一下吗?哇!我不知道可以将旋转属性绑定到图像。你的解决方案太棒了!再加上用一个物体来操纵,这正是我想要的。我会马上试试,让你知道!非常感谢你,先生!这个解决方案非常有效!这也给了我一个关于如何使用对象模型的想法。再次感谢你们。
[Embed(source='assets/CalendarIcon.png')] var myImg1:Class;
private function addImage():void {
var image:MyImage = new MyImage();
image.source = myImg1;
dp.addItem(image);
}
private function rotateImage():void {
if (imageList.selectedItem) imageList.selectedItem.rotation += 90;
}