2011-04-11 53 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