无论如何,我可以有效地称为equiv。 Flex图形对象上的setText的设置?我可以在Flex图形对象上设置文本吗?
具体而言,我正在使用自定义单元格渲染器来显示数据网格中的数据。渲染器使用Graphics对象根据底层数据设置单元的一部分(比如左半部分)的背景颜色。我希望能够仅在具有背景颜色的单元格部分(例如,居中在左半部分)中显示文本。我知道所有的宽度(单元本身和图形对象),但我不知道如何在图形对象上设置文本(居中)。
任何人有任何想法请问? Tks vm
无论如何,我可以有效地称为equiv。 Flex图形对象上的setText的设置?我可以在Flex图形对象上设置文本吗?
具体而言,我正在使用自定义单元格渲染器来显示数据网格中的数据。渲染器使用Graphics对象根据底层数据设置单元的一部分(比如左半部分)的背景颜色。我希望能够仅在具有背景颜色的单元格部分(例如,居中在左半部分)中显示文本。我知道所有的宽度(单元本身和图形对象),但我不知道如何在图形对象上设置文本(居中)。
任何人有任何想法请问? Tks vm
简短的回答是,您不能用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,它描述了如何正确地创建项目渲染器。
多边形实验室提出了一种将字体转换为矢量曲线的解决方案,以便您可以将文本绘制为图形。 See it here。该代码尚未发布,但您可以在评论中看到一些类似的项目。
但是,您需要在AS中代替MXML来完成它,或者您为此编写自己的类。
下面是避免加入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。
使用的TextFormat为UIT的defaulttextformat是我的问题的解决方案......
另外,如果你想发疯,的UITextField是_more native_文本元素(或文本字段)。无论如何,您实际上可以设置背景颜色,因此它也可以作为此问题的阴影部分。 – Glenn 2009-11-03 19:56:45
好点,格伦!您可以使用具有指定宽度和背景颜色的文本字段,甚至不必担心自定义绘画。 – Dan 2009-11-04 14:03:26
奇妙 - 非常感谢它的工作。它可能不是最优雅的解决方案,但现在对我来说很好。 我真的不得不给我的标签一个名称,并检查,看看如果这个名字的孩子已经添加到'这个'...所以... if(this.getChildByName(tmpLabel.name)== null){ 这个。的addChild(tmpLabel); } 我认为这是因为渲染过程(也许你的博客里有什么我会读!)。 再次。 – AlexC 2009-11-04 14:39:01