Компонент 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
- Почти никто не хочет поведения по умолчанию в компонентах Flash. Каждый хочет что-то на заказ.
- Наверное, "магия" во 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);
Надеюсь это поможет.