Как получить доступ к индексу элементов TileList в пользовательском средстве визуализации элементов - PullRequest
0 голосов
/ 05 марта 2011
  <mx:itemRenderer>   
     <mx:Component>   
       <mx:Canvas> 
         <mx:Image source="{outerDocument.get_img()}" scaleContent="false" />   
       </mx:Canvas>   
     </mx:Component>   
  </mx:itemRenderer>   

Так что, если бы я хотел передать индекс элемента рендеринга в get_img в качестве параметра, как бы это было сделано. Благодаря.

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

Просто обновление - намного быстрее использовать BitmapAsset в качестве источника, а не encoder.encode.(Без мерцания).Но тогда это должно быть настроено следующим образом.(то есть BitmapAsset необходимо пересоздавать каждый раз, когда ItemRenderer должен повторно выполнить рендеринг - не спрашивайте меня, почему.):

  <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 голосов
/ 05 марта 2011

Причина, по которой мне понадобился индекс, заключается в том, что я строил серию изображений, по одному для каждой ячейки, путем итерации по главному изображению (например, списку изображений Windows) и получая часть главного изображения для каждой ячейки. Мне нужен был индекс, чтобы при обновлении рендеринга ячейки он всегда находился в правильном месте в главном изображении. Но я обнаружил, что могу создать 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>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...