我可以在flex Graphics对象上设置文本吗?

时间:2009-11-03 09:08:31

标签: flex graphics datagrid

无论如何,我可以有效地调用等价物。 Flex Graphics对象上的setText?

具体来说,我正在使用自定义单元格渲染器在数据网格中显示数据。渲染器使用Graphics对象根据基础数据设置单元格的一部分(比如左半部分)的背景颜色。我希望能够仅在具有背景颜色的单元格的那部分上具有文本(例如,在左半部分的中心)。

我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中)。

有人有任何想法吗? Tks vm

4 个答案:

答案 0 :(得分:4)

这是一个避免添加UI组件的解决方案:

    private function WriteText(text:String, rect:Rectangle):void
    {
        var uit:UITextField = new UITextField();
        uit.text = text;
        uit.width = rect.width;
        var textBitmapData:BitmapData = ImageSnapshot.captureBitmapData(uit);
        var matrix:Matrix = new Matrix();
        var x:int = rect.x;
        var y:int = rect.y;
        matrix.tx = x;
        matrix.ty = y;
        graphics.beginBitmapFill(textBitmapData,matrix,false);
        graphics.drawRect(x,y,uit.measuredWidth,uit.measuredHeight);
        graphics.endFill();
    }

我们的想法是使用UITextField创建一个位图,可以与图形对象一起使用来填充矩形。

这是基于Adobe Developer Connection的Olga Korokhina的blog post

答案 1 :(得分:1)

简短的回答是,您无法使用Graphics对象以编程方式绘制文本。您需要做的是创建一个类文本类(例如标签,文本等)并在单元格渲染器中正确定位。

假设您正在updateDisplayList进行自定义绘画,您需要执行以下操作:

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

    // perform all your custom painting

    var label:Label = new Label();
    label.text = "Some text";

    label.width = widthOfCustomPainting;
    // can also set x- and y-coordinates of label too

    label.setStyle( "textAlign", "center" );

    this.addChild( label );
}

这需要根据项目渲染器的设置方式进行一些调整,但它几乎应该是你需要的。

请注意,上面的代码使用自定义项呈示器的最佳做法。值得一看this excellent blog post,其中介绍了如何正确创建项呈示器。

答案 2 :(得分:0)

多边形实验室提供了一种解决方案,可将字体转换为矢量曲线,以便您可以将文本绘制为图形。 See it here。代码尚未发布,但您可以在评论中看到一些类似的项目。

但你需要在AS而不是MXML中进行,或者为此编写自己的类。

答案 3 :(得分:0)

使用textformat for uit的defaulttextformat解决了我的问题......