Обновление Grid Renderers без вызова updateDisplayList - PullRequest
0 голосов
/ 14 октября 2010

У меня есть средство визуализации элементов для сетки, которая имеет довольно простую функцию 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 - это искровой ярлык. Когда я прокручиваю сетку (это сетка cuatom, а не mx: Grid или AndvancedDataGrid), когда в нижней части сетки появляются новые строки, вызывается updateDisplayList и выполняется код для перерисовки фона и перемещения / изменения размера метки.

Проблема в том, что эти чанги не отражаются в представлении. Текст выровнен неправильно, так как метка, которая использовалась для отображения большой строки, теперь отображает короткую строку, так что измеренная ширина изменилась.

В следующий раз, когда я прокручиваю обновление рендеров, они выглядят так, как должны - но здесь не вызывается updateDisplayList (для рендеров). Все, что происходит, - это то, что рендеры перемещаются в сетку. И фон, и метка изначально отображаются некорректно, так что это не просто неправильная работа метки.

Кто-нибудь понял, почему это происходит?

Спасибо

1 Ответ

0 голосов
/ 14 октября 2010

Просто предположение, но имеет ли это какое-то значение?

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
}
...