Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разноцветный фон ячеек List (http://www.flasher.ru/forum/showthread.php?t=119305)

Aldvin 17.12.2008 15:01

Разноцветный фон ячеек List
 
День добрый!
Задача следующая: настроить компонент List так чтобы фон каждой строки был персонального цвета, передаваемого в DataProvider.

Сейчас работает так:
Код AS3:

myList.setStyle('cellRenderer', ListCellRenderer);

Код AS3:

class ListCellRenderer extends CellRenderer {
        public var customProperty:String = "foo";
        public function ComboStyleRenderer() {
                var originalStyles:Object = CellRenderer.getStyleDefinition();
        }
        override protected function drawBackground():void {
                switch(data.bgColor){
                  case "green":
                    setStyle("upSkin",CustomBackground1);
                  break;
                  case "red":
                    setStyle("upSkin",CustomBackground2);
                  break;
                  default:
                  break;
                }
                super.drawBackground();
        }               
}

Проблема в том что цветов у меня очень много и для каждого создавать мувиклип-class неприемлимо.

Мои неудачные домыслы как обойти эту проблему:
1. Передать параметр классу
Код AS3:

setStyle("upSkin",CustomBackground(data.bgColor));

- но так делать нельзя
2. Переписать функцию drawBackground - но, не зная исходный код тупо рисование на this.graphics в CellRenderer - не вызывая ошибки никаких видимых результатов не дает.

Подскажите кто знает как эту проблему обойти\решить?

silin 17.12.2008 16:51

можно по-простому применить к бэкграунду ColorMatrixFilter, параметры которого считать для data.bgColor, примеров как посчитать полно, я тестил со своим классом, под такие вещи и заточенным
Код AS3:

override protected function drawBackground():void {
 
        super.drawBackground();
 
        var clrMtrx:ColorMatrix = new ColorMatrix();//http://silin.fatal.ru/#AS3/filters/color
        clrMtrx.colorize(data.bgColor, 1);
        background.filters = [clrMtrx.filter];
 
}


Aldvin 18.12.2008 09:02

Большое спасибо за подсказку.
Теперь, зная что долбить нужно "background" сделал так:
Код AS3:

var colorInfo:ColorTransform = background.transform.colorTransform;
colorInfo.color = data.bgColor;
background.transform.colorTransform=colorInfo;

Всё работает. Ещё раз спасибо!

Fleaxa 18.12.2008 20:05

to Aldvin

Могу я попросить выложить пример вашего кода. Пытаюсь написать нечто подобное, но все время вылазят ошибки. Не могу понять их природу. (((

Aldvin 19.12.2008 09:05

to Fleaxa
Весь Source код выложить не могу т.к. это часть большой RIA, но попытаюсь расписать подробнее:
Для начала перетаскиваем из панели компонентов в библиотеку компонент List
В классе где создаем List:
Код AS3:

import fl.controls.List;
...
// Если создаем List программно то -->
var myList:List = new List();
addChild(myList);
// <--Если создаем List программно то
 
myList.setStyle('cellRenderer', ListStyleRenderer);

Ну и собственно класс ListStyleRenderer.as:
Код AS3:

package {
        import fl.controls.listClasses.CellRenderer;
        import flash.geom.ColorTransform;
        class ListStyleRenderer extends CellRenderer
        {
                public var customProperty:String = "foo";
 
                public function ListStyleRenderer() {
                        var originalStyles:Object = CellRenderer.getStyleDefinition();
                        // Можно либо задать скины -->
                        // Здесь WhiteBackground, итп - мувиклипы с выставлеными Linkage --> Classes --> WhiteBackground
                        setStyle("upSkin",WhiteBackground);
                        setStyle("downSkin",GreenBackground);
                        setStyle("overSkin",LightGreenBackground);
                        setStyle("selectedUpSkin",GreenBackground);
                        setStyle("selectedDownSkin",GreenBackground);
                        setStyle("selectedOverSkin",GreenBackground);
                        // <-- Можно либо задать скины
 
                }
 
                // Либо вместо скинов покрасить бэкграунд -->
                override protected function drawBackground():void {
                        super.drawBackground();
                        var colorInfo:ColorTransform = background.transform.colorTransform;
                        colorInfo.color = data.bgColor; // Любой цвет
                        background.transform.colorTransform=colorInfo;
                }               
                // <-- Либо вместо скинов покрасить бэкграунд
        }
}

Вроде все

Fleaxa 19.12.2008 15:40

Очень сильно благадарю. ))) Нашел ошибку.


Часовой пояс GMT +4, время: 00:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.