我有问题,希望有人可以帮助我
我在其中使用TileList进行Flash项目
我需要将此TileList中某些项目(不是全部)的背景更改为红色,将某些项目更改为蓝色
你知道怎么做吗?
感谢
答案 0 :(得分:1)
我试图以干净的方式解决这个问题,但Flash不会让我这么容易。 基本思路是为每个itemRenderer(ImageCell)设置一个upSkin style或任何其他必要的皮肤,而不是全部(如tileList.setRendererStyle());
我认为我可以轻松访问ImageCell类(TileList的默认Cell Renderer),但事实并非如此。我获得访问cellRenderer itemToCellRenderer方法的唯一方法,但作为参数传递的项来自ListEvent
我修改了文档中的示例来说明这个想法。 此代码假定您具有TileList组件,以及三个MovieClip符号,其中包含以下链接:Star,BlueBg,RedBg import fl.controls。; import fl.controls.listClasses。; import fl.data。; import 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事件时遇到问题,而且我不认为在组件填充时调度大量事件,只是对于某些颜色是个好主意。
Sooo ...... 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);
希望这有帮助。