2011-03-04 60 views
0
<mx:itemRenderer> 
    <mx:Component> 
     <mx:Canvas> 
     <mx:Image source="{outerDocument.get_img()}" scaleContent="false" /> 
     </mx:Canvas> 
    </mx:Component> 
    </mx:itemRenderer> 

因此,如果我想將正在呈現的列表項的索引作爲參數傳遞給get_img,那麼將如何完成。謝謝。如何訪問自定義項目中的TileList項索引Renderer

回答

0

只是一個更新 - 它的速度快了很多使用了BitmapAsset作爲源,而不是encoder.encode。 (沒有閃爍)。但是,它必須像下面這樣設置。 (即每次ItemRenderer必須重新渲染時都需要重新創建Bitmap資源集 - 不要問我爲什麼。):

<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> 
0

我需要索引的原因是,我通過遍歷主圖像(如Windows ImageList)併爲每個單元格獲取主圖像的一部分來構建一系列圖像,每個單元格一個圖像。我需要索引,以便在刷新單元格渲染時,它總是會到主圖像中的正確位置。但是我發現我可以爲每個子圖像創建一個ByteArray,並使其成爲DataProvider中每個對象的字段。總之,不再需要「指標」:

<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> 
相關問題