Flash / TileList组件

时间:2009-01-09 13:00:27

标签: flash cs3 tilelist flash-v3-components

我有问题,希望有人可以帮助我 我在其中使用TileList进行Flash项目 我需要将此TileList中某些项目(不是全部)的背景更改为红色,将某些项目更改为蓝色 你知道怎么做吗?
感谢

1 个答案:

答案 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中有两件事情仍然存在

  1. 几乎没有人想要Flash组件中的默认行为。每个人都想要一点点 定制的东西。
  2. Flash中的“神奇”代表我想找到“hacky”解决方案。
  3. 这对我有用: 请注意,当我添加一个项目时,我还添加并索引属性,因此每个项目都会知道它的索引是什么。接下来,我让每个单元格的内容决定显示什么是正确的皮肤(这会产生依赖关系,因此应该有一个明确的方式)所以我在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);
    

    希望这有帮助。