2011-03-30 58 views
0

我有從UIComponent繼承的自定義flex組件(已編譯,無源代碼訪問)。它具有固定的寬度與高度比例,並且可擴展。如果我將它的寬度和高度設置爲100%,它會嘗試匹配父級的大小,但它會保持寬度與高度的比例,所以如果比例不等於父級的比例,那麼調整父級時可能會在該組件附近出現空白空間。 enter image description here縮放和調整flex組件的尺寸

我需要的是將我的組件完全適合父母的大小。有沒有什麼好方法可以做到這一點?我可以聽父母的resize事件,並使用組件的scaleXscaleY,但可能有更好的方法來解決我的問題(任何屬性?)。謝謝。

回答

2

一個好方法是使用greensock's AutoFitArea。 編碼的計算如下

var area:AutoFitArea = new AutoFitArea(this, 50, 70, 300, 100); 
area.attach(myImage, {scaleMode:ScaleMode.PROPORTIONAL_OUTSIDE, crop:true}); 

這將限制無論是內部不從那裏出來的給定尺寸(300,100),你可以改變area的寬度,這將看着辦吧全力爲您簡單。

希望它有助於

+0

+1。喜歡這個。很長時間以來一直在Flex中尋找「ViewBox」。這讓我很開心。 – 2011-03-30 11:09:37

0

組件是否應該保持其比例?如果不是這樣,那麼您可以像您所說的那樣,聽取父級的resize事件並將寬度和高度設置爲組件值。

如果組件應該保持其比例,則可以調整組件的背景大小,使其適合父級大小,並根據其比例調整組件大小。

1

就個人而言,我會做的是有設定在寬/高100%,在父組件,然後組件本身內,覆蓋updateDisplayList函數中(返回未縮放寬度/高度),然後根據此容器的寬度/高度調整您嘗試顯示的任何子項的大小。類似這樣的:

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
{ 
    if(this._child!= null) 
    { 
     if(unscaledWidth > unscaledHeight) 
     { 
      this._child.height = unscaledHeight; 
      this._child.scaleX = this._video.scaleY; 
     }else{ 
      this._child.width = unscaledWidth; 
      this._child.scaleY = this._video.scaleX; 
     } 
    } 
} 

應該這樣做。