2011-04-11 70 views
1

我需要在BorderContainer內部提供對齊網格功能。所有的功能都完成了,但我陷入了一個正在繪製網格的問題。哪個事件用於在Flex UI組件中繪製網格

  1. 嘗試使用Creation_Complete事件,工作正常,但一旦添加子,網格消失。

  2. 覆蓋updateDisplayList - 這是迄今爲止最好的選擇(一切正常),但問題是每當我移動(或更確切地說,當移動)控件(我使用ObjectHandles庫)時,會調用updateDisplayList方法重新繪製網格 - >使移動過程非常緩慢。

這是我如何填寫網格。

numRows = Math.ceil(this.unscaledHeight/gridSize); 
numCols = Math.ceil(this.unscaledWidth/gridSize); 

this.graphics.beginFill(0x000000, 1.0); 

for (var i:int= 0; i < numRows; i++) 
{    
    for (var j:int = 0; j < numCols; j++) 
    {  

     this.graphics.drawCircle(j * gridSize, i * gridSize, 1); 
    } 
} 

this.graphics.endFill(); 

我只想繪製一次,並只在容器調整大小時繪製它。有沒有什麼事情能幫助我實現這個目標?或者是否有任何有效的方法可以幫助我繪製網格?歡迎任何意見和建議。提前多謝:)

回答

2

updateDisplayList()是以unscaledWidthunscaledHeight爲參數的方法。

所以你可以避免不必要的重繪方式如下:

private var previousUnscaledWidth:Number; 
private var previousUnscaledHeight:Number; 

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
{ 
    … 
    if (unscaledWidth != previousUnscaledWidth || unscaledHeight != previousUnscaledHeight) 
    { 
     // Your drawing routine here 

     previousUnscaledWidth = unscaledWidth; 
     previousUnscaledHeight = unscaledHeight; 
    } 
} 

你可以把這個代碼,具有UIComponent作爲基類的自定義ActionScript組件內。並將此網格放置在BorderContainer內:

<s:BorderContainer> 
    <MyGrig left="0" right="0" top="0" bottom="0" /> 
    <!-- Another container's content here --> 
</s:BorderContainer> 
+0

不錯!讓我在工作中嘗試一下,讓你知道。這應該做的伎倆:) – 2011-04-12 01:40:10

+0

你好。感謝努力。但是代碼中的問題是,如果我在下次調用updateDisplayList時沒有繪製它,它就會消失。還有什麼建議? – 2011-04-12 05:21:13

+0

我改進了我的答案以滿足您的要求。 – Constantiner 2011-04-12 06:55:34