Компонент Flash / TileList - PullRequest
1 голос
/ 09 января 2009

У меня проблема, и я надеюсь, что кто-то может мне помочь
У меня есть проект Flash с TileList
Мне нужно поменять фон некоторых элементов (не всех) в этом TileList на красный, а некоторые на синий Вы знаете, как это сделать?
Спасибо

1 Ответ

1 голос
/ 13 апреля 2009

Хммм, хитрый.

Я пытался решить это чисто, но Flash не позволил бы мне так легко. Основная идея состоит в том, чтобы установить стиль upSkin или любой другой необходимый скин для каждого itemRenderer (ImageCell) вместо всех их (как было бы tileList.setRendererStyle ());

Я думал, что мог бы легко получить доступ к классу ImageCell (по умолчанию Cell Renderer для TileList), но это не тот случай. Единственный способ получить доступ к методу cellRenderer itemToCellRenderer , но элемент, переданный в качестве аргумента, исходит из ListEvent

Я изменил Пример, приведенный в документации, чтобы проиллюстрировать идею. В этом коде предполагается, что у вас есть компонент TileList плюс три символа MovieClips со следующими связями в библиотеке: Star, BlueBg, RedBg импорт fl.controls. ; import fl.controls.listClasses. ; импорт fl.data. ; импорт fl.events. ;

var totalEntries:uint = 20;
var myTileList:TileList = new TileList();
myTileList.columnWidth = 125;
myTileList.rowHeight = 150;
myTileList.columnCount = 3;
myTileList.rowCount = 1;
myTileList.move(10,10);
addChild(myTileList);

for(var i:int=0; i<totalEntries; i++) {
    myTileList.addItem( { label:"star"+i, source:Star, scaleContent:false, index:i} ); 
}

myTileList.addEventListener(ListEvent.ITEM_ROLL_OVER, listItemOver);
function listItemOver(e:ListEvent):void {
    var imageCell:ImageCell = myTileList.itemToCellRenderer(e.item) as ImageCell;
    //e.index % 2 == 0 ? imageCell.setStyle('upSkin',BlueBg): imageCell.setStyle('upSkin',RedBg);
}

Это было бы грязно, даже если бы это работало. У меня есть проблемы при отправке событий ITEM_ROLL_OVER, плюс я не думаю, что отправка тонны событий при заполнении компонента, просто для некоторых цветов это хорошая идея.

ооочень ... во Flash осталось 2 вещи

  1. Почти никто не хочет поведения по умолчанию в компонентах Flash. Каждый хочет немного обычай что-то.
  2. Я полагаю, что «магия» во Flash заключается в поиске «хакерских» решений.

вот что сработало для меня: Обратите внимание, что когда я добавляю элемент, я также добавляю и индексирую свойство, чтобы каждый элемент знал, что это за индекс. Затем я позволяю содержимому каждой ячейки решать, какой скин следует отображать (что создает зависимости, поэтому для этого должен быть понятный способ), поэтому я добавил следующий код в Star MovieClip

import fl.controls.listClasses.ImageCell;

var cell:ImageCell = this.parent.parent.parent as ImageCell;
trace(cell.data.index);
if(cell.data.index %2 == 0) cell.setStyle('upSkin',BlueBg);
else cell.setStyle('upSkin',RedBg);

Надеюсь, это поможет.

...