网格渲染器更新时不调用updateDisplayList

时间:2010-10-14 12:29:52

标签: flex flash uicomponents

我有一个具有相当基本的updateDisplayList函数的网格的项呈示器:

override protected function updateDisplayList( w : Number, h : Number ) : void
{
    super.updateDisplayList( w, h );

    var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
    var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );

    _labelDisplay.setActualSize( labelWidth, labelHeight );

    var labelX : Number = ( w - _labelDisplay.width ) / 2;
    var labelY : Number = ( h - _labelDisplay.height ) / 2;

    _labelDisplay.move( labelX, labelY );

    //this is just for debugging
    graphics.clear();
    graphics.beginFill( 0xFF0000, 0.5 );
    graphics.drawRect( labelX, labelY, labelWidth, labelHeight );
    graphics.endFill();
}

其中_labelDisplay是一个spark标签。当我滚动网格时(这是一个cuatom网格,而不是mx:Grid或AndvancedDataGrid)当网格底部出现新行时,会调用updateDisplayList并重新绘制背景并移动/调整标签大小的代码执行。 / p>

问题是这些chanegs没有反映在视图中。文本未对齐,因为用于显示大字符串的标签现在显示一个短字符串,因此measuredWidth已更改。

下次我将渲染渲染更新为看起来应该是 - 但是此处不调用updateDisplayList(在渲染上)。所有这一切都是渲染器重新定位在网格中。 背景和标签最初都显示不正确,因此不仅标签不正确。

任何人都知道为什么会这样?

由于

1 个答案:

答案 0 :(得分:0)

只是一个猜测,但这有什么不同吗?

override protected function updateDisplayList( w : Number, h : Number ) : void
{
    var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
    var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );

    _labelDisplay.setActualSize( labelWidth, labelHeight );

    var labelX : Number = ( w - _labelDisplay.width ) / 2;
    var labelY : Number = ( h - _labelDisplay.height ) / 2;

    _labelDisplay.move( labelX, labelY );

   super.updateDisplayList( w, h ); // Call updateDisplayList after moving / resizing _labelDisplay
}