2009-12-29 77 views
3

在我的MXML文件中,我有一個帶三個vbox的標籤導航器。如何在Flex MXML文件中繪製圓圈?

<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的「當前引用」中,我想繪製一個圓。我怎樣才能實現它?

回答

5

有沒有定義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

+0

是否將Circle控件創建爲.as文件? – Angeline 2009-12-29 09:04:27

+0

是的,作爲一個單獨的類在它自己的文件 – Simon 2009-12-29 09:08:05

+0

如果我創建一個.as文件,它不被包含作爲一個名稱空間的組件? – Angeline 2009-12-29 10:50:55

0

看看Degrafa.

+1

「鏈接的答案可能會失效,如果鏈接的頁面更改。」 - 是的,網站消失了。 – 2013-01-07 15:31:47

1

所以Flex中,這是一個可能性:

var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0xFFCC00); 
mySprite.graphics.drawCircle(30, 30, 30); 
this.addChild(mySprite); 

這應該工作:)

1

美化拖放等..

是,相當多的東西是可能。如果你不想使用餅圖(我建議你看看,因爲它可能會使很多圖形代碼變得非常簡單),那麼你需要修飾上面的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 
     } 
    } 
} 

您需要設置這些函數(以及其他支持拖/放的功能)作爲此對象上的事件偵聽器。你可以在對象的構造函數中做到這一點,你只需要確保你正在監聽正確的事件。

你有一些挖掘工作,和adobe docs are your friend,但它是完全可能的。隨着您向MyCircle添加更多內容,您將從將它分解爲單獨的控件中獲益更多。

3

可以有一個選擇,以創建一個圓,日食

與背景色創建對話框(如果你想與任何顏色填充它),並與特定的寬度和高度,並提供圓角半徑與正好一半寬度

例如:

<mx:Box cornerRadius="3" borderStyle="solid" borderColor="0x5F4C0B" backgroundColor="0x5F4C0B" width="6" height="6" /> 
2

嘗試以下代碼:

 <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>