<mx:itemRenderer>
<mx:Component>
<mx:Canvas>
<mx:Image source="{outerDocument.get_img()}" scaleContent="false" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
因此,如果我想将要呈现的列表项的索引作为参数传递给get_img,那将如何完成。感谢。
答案 0 :(得分:0)
我需要索引的原因是,我正在构建一系列图像,每个单元格一个,通过迭代主图像(如Windows ImageList)并为每个单元格获取一部分主图像。我需要索引,以便在刷新单元格渲染时,它总是转到主映像中的正确位置。但我发现我可以为每个子图像创建一个ByteArray,并使其成为DataProvider中每个对象的一个字段。无论如何,不再需要&#34;索引&#34;:
<mx:TileList id="ImgList" height="{parent.height-45}" width="226"
maxColumns="2" rowHeight="24" columnWidth="104" x="0" y="45"
creationComplete="{InitImgList()}"
>
<mx:Script>
<![CDATA[
private function InitImgList():void {
var arr:Array = new Array();
var r:Rectangle = new Rectangle(0,0,100,20);
var pt:Point = new Point(0,0);
var encoder:PNGEncoder = new PNGEncoder();
for (r.x=0; r.x<img.width; r.x+=100) {
var bmd:BitmapData = new BitmapData(100,20,true,0);
bmd.copyPixels(Bitmap(img.content).bitmapData,r,pt);
var obj:Object = {label:"", source:encoder.encode(bmd)}
arr.push(obj);
}
ImgList.dataProvider = arr;
}
]]>
</mx:Script>
<mx:itemRenderer>
<mx:Component>
<mx:Canvas>
<mx:Image source="{data.source}" scaleContent="false" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
答案 1 :(得分:0)
只是一个更新 - 使用BitmapAsset作为源而不是encoder.encode要快得多。 (没有闪烁)。但是它必须像下面这样设置。 (即每次ItemRenderer重新渲染时都需要重新创建BitmapAsset - 不要问我原因。):
<mx:Script>
<![CDATA[
private var bmd_arr:Array = new Array();
private function InitImgList():void {
var arr:Array = new Array();
var r:Rectangle = new Rectangle(0,0,100,20);
var pt:Point = new Point(0,0);
for (r.x=0; r.x<img.width; r.x+=100) {
var bmd:BitmapData = new BitmapData(100,20,false,0);
bmd.copyPixels(Bitmap(img.content).bitmapData,r,pt);
bmd_arr.push(bmd);
var obj:Object = {label:"",n:bmd_arr.length-1};
arr.push(obj);
}
ImgList.dataProvider = arr;
}
public function get_img(n:int):BitmapAsset {
return new BitmapAsset(bmd_arr[n]);
}
]]>
</mx:Script>
<mx:itemRenderer>
<mx:Component>
<mx:Canvas>
<mx:Image x="2" source="{outerDocument.get_img(data.n)}" scaleContent="false" />
</mx:Canvas>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>