Pergunta

Qual é a melhor maneira de criar várias regiões roláveis ​​em uma visualização do ActionScript 3 que estende flash.display.Sprite e faz uso da hierarquia de DisplayObjects de baixo nível (Sprite'a, Shape's, TextField)?

Tentei usar três objetos mx.containers.Canvas adicionados como filhos do Sprite principal e também tentei converter o Sprite principal em um Canvas, mas não consigo fazer com que nada apareça usando qualquer um dos métodos.Também tentei adicionar meus DisplayObjects usando Canvas.addChild e Canvas.rawChildren.addChild.

É necessário/possível reescrever tudo para usar componentes mx.* ou existe um truque para exibir objetos mais primitivos dentro de um objeto Canvas?

Aqui está um exemplo de código de como funciona usando sprites.Gostaríamos de fazer com que _colSprite, _rowSprite e _mapSprite rolassem com barras de rolagem vinculadas.Quando eu os converto em objetos Canvas, o código trava silenciosamente antes que qualquer objeto de exibição seja desenhado (nas linhas addChild, se bem me lembro).

Abaixo está um trecho do código.Tudo isso vem de uma única classe actionscript que estende sprite.

Configurando três regiões que desejo rolar:

this._log("Creating Sprites"); 

                this._colSprite = new Sprite();

                this._colSprite.y=0;

                this._colSprite.x=this._rowLabelWidth + this._rowLabelRightPadding + this._horizontalPadding;


this._rowSprite = new Sprite();

                this._rowSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding + this._verticalPadding;

                this._rowSprite.x=this._horizontalPadding;




                this._mapSprite = new Sprite();

                this._mapSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding+ this._verticalPadding;

                this._mapSprite.x=this._rowLabelWidth + this._rowLabelRightPadding+this._horizontalPadding;


                    this._log("adding kids"); 

addChild(this._mapSprite);

addChild(this._rowSprite);

addChild(this._colSprite);

Função de desenho de amostra:

 private function _drawColumLabels(colStartIndex: int): void {

        for (var col : int = colStartIndex; col < myData.g.length; col++) {

            var colName : String = this.myData.g[col].label;

            var bottomLeftPoint : Object = this._getCellXYTopLeft(0, col);

            bottomLeftPoint.y = this._columnLabelHeight + this._verticalPadding;

            var centerX : int = Math.round(this._cellWidth / 2 + (this._fontHeight / 2) - 1);



            var colLabel : TextField = new TextField();

                colLabel.defaultTextFormat = this._labelTextFormat;

                colLabel.width = this._columnLabelHeight+this._columnLabelBottomPadding;

                colLabel.text = colName;                

                colLabel.embedFonts = true;





                var colSprite : Sprite = new Sprite();

                colSprite.addChild(colLabel);

                colSprite.x = bottomLeftPoint.x;

                colSprite.y = bottomLeftPoint.y;



                colSprite.rotation = -45;



                this._colSprite.addChild(colSprite);



        }

    }
Foi útil?

Solução

Depois de adicionar os filhos a cada Canvas, pode ser necessário chamar Canvas.invalidateSize() (em cada um) para que eles recalculem seu dimensionamento.

A necessidade de fazer isso depende de qual estágio do ciclo de vida do componente você está adicionando os filhos - ou seja,quando você está chamando '_drawColumLabels'.

Presumo que você queira que uma barra de rolagem apareça em _colSprite (e _rowSprite) se houver mais rótulos nela do que podem ser exibidos em sua área visível.Se for esse o caso, você precisará usar algo diferente de Sprite, como Canvas, pois Sprite não suporta rolagem.

Você também pode querer depurar os valores x/y/largura/altura de cada um dos seus componentes para ter certeza de que eles são o que você espera - algo que considero útil ao fazer o layout é desenhar o layout no papel e começar a escrever tamanhos e coordenadas para que eu possa ver que meus cálculos estão corretos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top