Apache flex 我可以在flex图形对象上设置文本吗?
我是否可以在Flex图形对象上有效地调用等效的setText 具体来说,我使用自定义单元渲染器在datagrid中显示数据。渲染器使用图形对象根据基础数据仅设置单元格的一部分(如左半部分)的背景颜色。我想能够有文字只在该部分的细胞有背景色(如中心在左半部分) 我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中) 有人有什么想法吗?Apache flex 我可以在flex图形对象上设置文本吗?,apache-flex,graphics,datagrid,Apache Flex,Graphics,Datagrid,我是否可以在Flex图形对象上有效地调用等效的setText 具体来说,我使用自定义单元渲染器在datagrid中显示数据。渲染器使用图形对象根据基础数据仅设置单元格的一部分(如左半部分)的背景颜色。我想能够有文字只在该部分的细胞有背景色(如中心在左半部分) 我知道所有宽度(单元格本身和图形对象),但我不知道如何在图形对象上设置文本(居中) 有人有什么想法吗? Tks vm简而言之,您不能用图形对象以编程方式绘制文本。您需要做的是创建一个类似文本的类(例如标签、文本等),并将其适当地放置在单元渲
Tks vm简而言之,您不能用图形对象以编程方式绘制文本。您需要做的是创建一个类似文本的类(例如标签、文本等),并将其适当地放置在单元渲染器中 假设您正在
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 );
}
这需要根据项目渲染器的设置进行一些调整,但这应该是您所需要的
请注意,我上面的代码没有为自定义项呈现器使用最佳实践。值得一看的是,其中描述了如何正确创建项目渲染器。多边形实验室提出了一种解决方案,可以将字体转换为矢量曲线,以便您可以将文本绘制为图形。代码尚未发布,但您可以在注释中看到一些类似的项目
但是,您需要在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的一篇文章。将textformat用于uit的defaulttextformat是我的问题的解决方案…此外,如果你想发疯,UITextField是更为原生的文本元素(或TextField)。不管怎样,你都可以设置一个背景色,所以它也可能是这个问题的阴影部分。说得好,格伦!你可以只使用一个指定宽度和背景颜色的文本字段,甚至不必担心定制绘画。太棒了-非常感谢它的工作。这可能不是最优雅的解决方案,但目前对我来说还不错。事实上,我必须给我的标签起一个名字,并检查是否有一个同名的孩子已经添加到“this”。。。所以如果(this.getChildByName(tmpLabel.name)==null){this.addChild(tmpLabel);}我认为这是因为呈现过程(可能是我将阅读的您的博客中的内容!)。又来了。很高兴听到一切顺利!不过,我绝对会推荐这篇博文。它是由Adobe Flex团队中的一位成员编写的,因此他非常了解Flex的内部结构。这是一个很好的技巧,但这样会丢失字体抗锯齿功能。