2010-03-18 43 views
0

我建立使用ActionScript 3 Flex應用程序不幸的是我已經打了這一個牆...Flex AS3:動態地爲遠程文件分配按鈕的upSkin屬性?

我希望能夠到upSkin適用於我的動態生成的按鈕,像這樣:

//this theSkin variable is dynamic in my app, but for this example it's a simple string 
var theSkin:String = "http://www.mypicturedomain.com/images/myimage.gif"; 

var navBtn:Button = new Button(); 
navBtn.id = "thumb1"; 
navBtn.width = 60; 
navBtn.height = 45;  

//skin the button 
navBtn.setStyle("upSkin", theSkin); 

//add the button to my canvas 
myCanvas.addChild(navBtn); 

當我嘗試這一點,我得到這個錯誤:

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::[email protected] to Class.

怎樣皮膚這個按鈕,動態圖片?幾件事情要考慮:

  1. upSkin圖像必須是遠程的。它不能是本地的。
  2. 該按鈕必須動態生成(它在for循環中)。

在這一點上,任何幫助/想法都將非常感激!

回答

0

我通過使用Horizo​​ntalList組件而不是畫布解決了我的問題。更容易!只需將我的圖像粘貼到一個數組中,並確保itemRenderer已設置爲mx.controls.Image,以便將我的數組集合中的項目顯示爲圖像。一旦我的數組被創建,我只需要創建一個數組集合,然後將數據源分配給horizo​​ntallist。它看起來像這樣:

private function myFunction():void{ 

    var thumbArray:Array = new Array("http://www.something.com/mypic1.png", "http://www.something.com/mypic4.png", "http://www.something.com/mypic3.png"); 
    var myArrayCollection = new ArrayCollection(thumbArray); 

    imageScroller.dataSource = myArrayCollection; 

} 

<mx:HorizontalList itemRenderer="mx.controls.Image" columnWidth="80" rowHeight="64" x="0" y="0" id="imageScroller" width="640" enabled="true" borderStyle="none" backgroundAlpha="1" borderColor="#FCA000" backgroundColor="#1C1C1C"></mx:HorizontalList> 

希望這可以幫助別人!

0

您是否嘗試將圖像加載到對象中?

[Embed(source="myimage.gif")] 
private var theSkin:Class; 
+0

我可以在一個函數內做到這一點嗎?我需要能夠在for循環內動態分配[embed]。 – Aaron 2010-03-18 17:20:48

+0

這對我來說不起作用,因爲嵌入源不能是一個變量......看起來它需要像你的例子中的一個字符串。 – Aaron 2010-03-22 05:39:12

+0

看看其他的方法來加載圖像 http://ntt.cc/2008/03/09/tips-three-ways-to-load-an-image-file-in-flex.html – MonoThreaded 2010-03-23 19:42:46