Graphics 如何在Flex MXML文件中绘制圆?
在我的文件中,我有一个带有三个VBox的选项卡导航器Graphics 如何在Flex MXML文件中绘制圆?,graphics,flex3,geometry,Graphics,Flex3,Geometry,在我的文件中,我有一个带有三个VBox的选项卡导航器 <mx:TabNavigator width="624" height="100%"> <mx:VBox label="Currents Quote" width="100%"> </mx:VBox> <mx:VBox label="Quote Comparison" width
<mx:TabNavigator width="624" height="100%">
<mx:VBox label="Currents Quote"
width="100%">
</mx:VBox>
<mx:VBox label="Quote Comparison"
width="100%">
</mx:VBox>
<mx:VBox label="Reports"
width="100%">
</mx:VBox>
</mx:TabNavigator>
在VBox“Current Quote”中,我希望绘制一个圆。我怎样才能实现它呢?看一看在Flex中,这是一种可能性:
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0xFFCC00);
mySprite.graphics.drawCircle(30, 30, 30);
this.addChild(mySprite);
这应该是可行的:)没有定义MXML循环,因此您必须自己创建一个循环控件,然后才能将其包含在MXML中
package mypackage
{
class MyCircle extends UIComponent
{
public var x:int;
public var y:int;
public var radius:int;
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
graphics.drawCircle(x, y, radius);
}
}
}
然后,在MXML中,如果在包含控件的顶部声明一个名称空间来引用它,则可以使用自定义控件
<mx:VBox label="Currents Quote" width="100%">
<mycontrols:MyCircle x="30" y="30" radius="30"/>
</mx:VBox>
上面的代码是在StackOverflow编辑器中输入的,所以请检查它是否有效
在web上有很多关于扩展UIComponent和Sprite的帮助。Adobe文档非常全面
编辑:
将控件作为命名空间包含在封闭控件或应用程序中
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:mycontrols="mypackage.*" >
<mx:Script>
HTH用于拖放等的装饰 是的,几乎任何事情都有可能。如果您不想使用饼图(我建议您查看饼图,因为它可能会使许多绘图代码变得非常简单),那么您需要对上面的MyCircle类进行修饰,以捕获mouseDown事件,并使用DragSource对象从中启用拖动
package mypackage
{
class MyCircle extends UIComponent
{
...snip...
// to initiate a drag from this object
private function MouseDown(e:MouseEvent):void
{
var ds:DragSource = new DragSource();
if (data)
{
// I'm adding the object's data to it, but you need to decide what you want in here
ds.addData(data, "MyDragAction");
mx.managers.DragManager.doDrag(this, ds, e);
}
}
// to handle a drop
private function HandleDrop(e:DragEvent):void
{
mx.managers.DragManager.acceptDragDrop(e.currentTarget);
// you can get at whatever you put in the drag event here
}
}
}
您需要将这些函数(以及最终支持拖放的其他函数)设置为此对象上的事件侦听器。您可以在对象的构造函数中执行此操作,只需确保您正在侦听正确的事件
你有一些挖掘工作要做,还有,但这一切都是完全可能的。当您向MyCircle添加更多内容时,您将从将其分解为单独的控件中获得更大的好处。还有一个选项可以创建一个圆圈,即eclipse 创建具有背景色(如果您想用任何颜色填充)和特定宽度和高度的长方体,并提供正好一半宽度的角半径 例如:
<mx:Box cornerRadius="3" borderStyle="solid" borderColor="0x5F4C0B" backgroundColor="0x5F4C0B" width="6" height="6" />
请尝试以下代码:
<s:Ellipse x="60" y="60" width="80" height="80">
<s:stroke>
<s:LinearGradientStroke rotation="90">
<s:entries>
<s:GradientEntry color="white" ratio="0.5"/>
<s:GradientEntry color="black" ratio="0.5" />
</s:entries>
</s:LinearGradientStroke>
</s:stroke>
</s:Ellipse>
圆圈控件是否要创建为.as文件?如果我创建为.as文件,则它不会包含为带有名称空间的组件??如果使用FlexBuilder,则在项目的源文件夹中创建ActionScript类。然后它将在代码完成或设计编辑器中对IDE可见。如果在MXML文件中包含自定义控件,IDE将自动为您添加默认名称空间。如果您全部手动执行此操作,则需要为类指定一个包名,并在MXML文件顶部的命名空间声明中引用该包。我将在我的答案中添加一个声明语法。它显示一个错误1071:语法错误:在属性public之后应该有一个定义关键字(例如function),而不是x。
行public x:int你能告诉我出了什么问题吗?上面我的代码不正确(我确实包含了一个免责声明,我在Java和AS3之间切换,所以在这里输入代码时很容易出错)。我会纠正它,但你真的应该知道如何做到这一点,这是语言结构的基础。“只有链接的答案可能会变得无效,如果链接页面的变化。”-是的,网站消失了。