Компонент Flash / TileList

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

1 ответ

Хм, хитрый.

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

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

Я изменил Пример, который входит в документацию, чтобы проиллюстрировать идею. В этом коде предполагается, что у вас есть компонент TileList, а также три символа MovieClips со следующими связями в библиотеке: Star, BlueBg, RedBg import fl.controls. ; импорт 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

  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);

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

Другие вопросы по тегам