我有一个问题,我希望有人可以帮助我
我有一个带有 TileList 的 Flash 项目
我需要将这个 TileList 中一些项目(不是全部)的背景更改为红色,一些更改为蓝色
你知道怎么做吗?
谢谢
1 回答
嗯,棘手的一个。
我试图以一种干净的方式解决这个问题,但 Flash 不允许我这么容易。基本思想是为每个 itemRenderer(ImageCell) 设置upSkin 样式或任何其他必要的皮肤,而不是全部设置(如 tileList.setRendererStyle());
我以为我可以轻松访问 ImageCell 类(TileList 的默认 Cell Renderer),但事实并非如此。我获得对 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 事件时遇到问题,而且我不认为在填充组件时调度大量事件,只是为了某些颜色是个好主意。
Sooo...Flash 中有两件事是正确的
- 几乎没有人想要 Flash 组件中的默认行为。每个人都想要一些定制的东西。
- 我猜 Flash 的“魔力”在于寻找“hacky”解决方案。
这对我有用:请注意,当我添加一个项目时,我还添加了和索引属性,所以每个项目都会知道它的索引是什么。接下来,我让每个单元格的内容决定要显示的正确皮肤(这会创建依赖关系,因此应该有一个清晰的方法)所以我在 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);
希望这可以帮助。