无论如何,我可以有效地调用等价物。 Flex Graphics对象上的setText?
具体来说,我正在使用自定义单元格渲染器在数据网格中显示数据。渲染器使用Graphics对象根据基础数据设置单元格的一部分(比如左半部分)的背景颜色。我希望能够仅在具有背景颜色的单元格的那部分上具有文本(例如,在左半部分的中心)。
我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中)。
有人有任何想法吗? Tks vm
答案 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解决了我的问题......