IconButton с продвинутой иконкой
Запись от alatar размещена 01.02.2011 в 13:33
Итак задача: сделать кнопку с иконкой, причем иконка может быть предоставлена в виде относительного или абсолютного URL-адреса, ByteArray, представляющего файл SWF, GIF, JPEG или PNG, строки, представляющей класс, а также объекта, который реализует IFlexDisplayObject, либо класса, тип которого реализует IFlexDisplayObject.
Первое, что приходит в голову скормить все это добро Image. Собственно так и сделаем.
Код получился компактный, поэтому просто приведу его целиком:
package alatar.components { import mx.controls.Image; import spark.components.Button; import spark.components.Group; public class IconButton extends Button { //Контейнер для иконки. [SkinPart(required="false")] public var iconGroup:Group; //Непосредсвенно иконка protected var iconImage:Image; public function IconButton() { super(); } private var _icon:Object; public function get icon():Object { return _icon; } public function set icon(value:Object):void { if (_icon == value) return; _icon = value; if (!iconImage) { iconImage = new Image(); } iconImage.source = _icon; if (iconGroup && !iconGroup.contains(iconImage)) { iconGroup.addElement(iconImage); } } override protected function partAdded(partName:String, instance:Object):void { super.partAdded(partName, instance); if (instance == iconGroup && iconImage) iconGroup.addElement(iconImage); } override protected function partRemoved(partName:String, instance:Object):void { super.partRemoved(partName, instance); if (instance == iconGroup) iconGroup.removeAllElements(); } } }
Было:
Код:
<!-- layer 8: text --> <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay --> <s:Label id="labelDisplay" textAlign="center" verticalAlign="middle" maxDisplayedLines="1" horizontalCenter="0" verticalCenter="1" left="10" right="10" top="2" bottom="2"> </s:Label>
Код:
<!-- layer 8: text and icon --> <s:HGroup top="2" bottom="2" left="10" right="10" gap="10" verticalAlign="middle"> <s:Group id="iconGroup"/> <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay --> <s:Label id="labelDisplay" textAlign="center" verticalAlign="middle" maxDisplayedLines="1" left="10" right="10" top="2" bottom="2"> </s:Label> </s:HGroup>
Код:
<components:IconButton label="simple icon button" icon="@Embed(source='AIRApp_32.png')" skinClass="alatar.skins.IconButtonSimpleSkin" click="iconbutton1_clickHandler(event)"/>
Всего комментариев 4
Комментарии
02.02.2011 00:44 | |
Я понял 2 вещи:
- Adobe запутались - пора учить Flex PS Спасибо за интересный пример |
Последние записи от alatar
- Трансформации вокруг произвольной точки (05.02.2015)
- Декомпозиция матрицы. (25.12.2014)
- Баги TextField в iOS (29.07.2013)
- [Spark] Стрелочный индикатор. (06.12.2012)
- RSLs Monkey Patching (23.01.2012)