Flex: изменить встроенный значок и использовать его в кнопке? - PullRequest
1 голос
/ 02 октября 2008

Просто, если вы вставите иконку:

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

Вы получаете динамический класс. Вы можете довольно легко назначить значок кнопке во время выполнения, вызвав метод setStyle:

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

Но что, если вы хотите изменить значок во время выполнения, например, изменить его альфа-значение или даже перерисовать пиксели, прежде чем назначить его кнопке?

Пока я не могу найти удовлетворительный ответ ...

Ответы [ 3 ]

2 голосов
/ 02 октября 2008

Это единственный ответ, который я мог найти, который казался близким: Динамические значки (пример с View Source)

Его решение включает в себя пользовательский класс "DynamicIcon", который используется в настройке значка кнопки, и пользовательский класс Button, который добавляет один метод в класс Button для рисования динамических значков.

Конечным результатом является то, что вы можете отправить BitmapData в класс DynamicIcon, который будет отображаться на кнопке. Поэтому вставьте свое изображение, создайте экземпляр класса ресурсов, получите растровое изображение и измените его так, как вам нужно, и отправьте bitmapData на значок.

Это интересная проблема, и кажется, что должно быть более простое решение, но это работает без особых хлопот.

0 голосов
/ 02 апреля 2009

Большая проблема, которую я обнаружил в программных оболочках, заключается в том, что кнопка отказывается измерять ширину / высоту. Я легко обошел это, переопределив методы get для каждого:

переопределить публичную функцию get width (): Number {return WIDTH; } переопределить открытую функцию get height (): Number {return HEIGHT; }

В моем случае мне нужно было изменить кнопки в TabNavigator, поэтому нет простого способа создать подкласс для кнопки. К счастью, родительским элементом каждого скина является кнопка, поэтому с помощью статических методов в вашем скине вы можете идентифицировать экземпляр Button, которому принадлежат скины значков.

Если вы используете стиль «значок» для всех обложек, для каждого состояния будет создан новый объект обложки. Поэтому вы должны помнить об этом при изменении состояния значков.

0 голосов
/ 02 октября 2008

Способ, которым я решил бы это, - реализовать программный класс скина, который рисует сам значок вручную. Вероятно, вам придется проделать еще больше работы, чтобы убедиться, что кнопка рассчитывает правильный размер, как если бы у нее был значок, хотя у него его нет. Возможно, вам придется просмотреть исходный код Button, чтобы посмотреть, как хранится ссылка на значок.

Мне нравится просто создавать программные скины, которые делают именно то, что я хочу, а затем использовать интересные объявления CSS для изменения состояний - например:

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

и тогда, конечно, скин или класс пользовательских кнопок будут иметь:

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

(не уверен, нужно ли вам его вводить)

...