2010-03-29 79 views
0

我有一个组合框使用自定义的itemrenderer来显示图像。当在列表中上下滚动图像时,图像会随机排列。我该如何阻止?Flex组合框项目不对齐

public class PinRenderer extends UIComponent implements IDataRenderer, IListItemRenderer 
{ 

    private var currentPin:DisplayObject; 

    private var _data:Object; 
    public function get data():Object 
    { 
     return _data; 
    } 

    public function set data(value:Object):void 
    { 
     _data = value; 
     invalidateDisplayList(); 
    } 

    override protected function measure():void 
    { 
     super.measure(); 
     measuredHeight = measuredMinHeight = 19; 
     measuredWidth = measuredMinWidth = 19; 
    } 

    private var pins:Dictionary = new Dictionary(); 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
    { 
     super.updateDisplayList(unscaledWidth, unscaledHeight); 
     var note:PerformanceNote; 

     if (data != null && (data is PerformanceNote || data is Number)) 
     { 
      var color:uint; 
      if (data is PerformanceNote) 
      { 
       color = PerformanceNote(data).note_pin_color; 
      } 
      else if (data is Number) 
      { 
       color = Number(data); 
      } 

      var pinClass:Class = Constants.PIN_IMAGES[ color ]; 
      var pin:DisplayObject = pins[ pinClass ]; 
      if (!pin) 
      { 
       pin = new pinClass(); 
       pin.x = (unscaledWidth - pin.width) /2; 
       pin.y = (unscaledHeight - pin.height)/2; 
       pins[ pinClass ] = pin; 
      } 
      if (currentPin) 
      { 
       removeChild(currentPin); 
      } 

      addChild(pin); 
      currentPin = pin; 
     } 
    } 

} 
+2

你能发表一些代码吗?对于你的自定义渲染器看起来是什么样的想法很难排除任何想法:) – bedwyr 2010-03-30 02:23:21

回答

0

而不是做最在的的updateDisplayList逻辑的,我把它搬到的commitProperties,但留下设置pin.x和pin.y中的updateDisplayList。这解决了我遇到的问题。