2008-10-01 78 views
1

只是,如果嵌入一個圖標:Flex:修改嵌入的圖標並將它用在按鈕中?

[Embed(source='icons/checkmark.png')] 
private static var CheckMark:Class; 

你最終有一個動態類。你可以很容易地通過調用setStyle方法分配的圖標在運行時一個按鈕:

var btn:Button = new Button(); 
btn.setStyle("icon", CheckMark); 

但是,如果你想改變在運行時的圖標,比如改變它的Alpha值,甚至重新劃分像素,分配前按鈕?

到目前爲止,我無法找到一個滿意的答案...

回答

2

這是我能找到的唯一答案似乎接近:Dynamic Icons(example with View Source)

他的解決方案包括一個自定義的「DynamicIcon」類,這是用於按鈕的圖標設置,以及一個自定義的Button類,它向Button類添加一個方法來繪製動態圖標。

最終結果是您可以將BitmapData發送到DynamicIcon類,該類將顯示在按鈕中。因此,嵌入您的圖像,實例化您的資產類,獲取bitmapasset並對其進行修改,然後根據需要將bitmapData發送到圖標。

這是一個有趣的問題,它似乎應該有一個更簡單的解決方案,但這工作沒有很多麻煩。

0

我解決這個問題的方法是實現一個手動繪製圖標的程序化皮膚類。您可能需要做更多的工作才能確保按鈕計算出正確的大小,就好像它有一個圖標,即使它沒有。您可能需要通過按鈕源代碼來查看如何存儲對圖標的引用。

我愛剛剛創建程序皮膚是做正是我想要的,然後用有趣的CSS聲明修改狀態 - 例如:

button.setStyle("customIconAlpha", .4); 

然後當然皮膚或自定義按鈕將有:

var alpha:Number = getStyle("customIconAlpha") as Number; 

(不知道你是否有強制轉換一個)

0

最大的問題,我發現有綱領性的皮膚是按鈕REFU ses來衡量寬度/高度。我通過覆蓋每個get方法來輕鬆解決這個問題:

override public function get width():Number {return WIDTH; } override public function get height():Number {return HEIGHT; }

在我的情況下,我需要修改TabNavigator中的按鈕,因此沒有簡單的方法來繼承按鈕。值得慶幸的是,每個皮膚的父母都是按鈕,因此在皮膚中使用靜態方法可以識別圖標皮膚所屬的Button實例。

如果您使用封面全部「圖標」樣式,則會爲每個狀態創建一個新的外觀對象。所以當你改變圖標的​​狀態時你需要記住這一點。

相關問題