在将元素添加到显示列表之前,我遇到了一个问题: TLF试图查找元素的位置(例如,LinkElement)。
我尝试了以下代码:
看来我无法检索文本行,因为flowComposer是空的。
你知道我怎样才能得到边界/为什么作曲家总是空的?
发布于 2013-02-19 11:52:14
问题不是flowComposer是空的。它实际上是一个对象,但是在这个表达式中有这么长的对象链,而该链中的其他东西是空的:
var tl:TextLine = le.getTextFlow().flowComposer.getLineAt(abs).getTextLine(true);
问题是,您得到的是每个LinkElement的字符索引--这不是行号。因此,当您执行flowComposer.getLineAt(abs)时,它将返回null,因为该行不存在。
相反,您希望使用flowComposer.getLineAtPosition(abs)。另外,作为一个优化,整个流程可能还没有生成。因此,在您这样做之前,明智的做法是调用flowComposer.composeToPosition(abs)。
下面是我为执行上述操作而修改的代码。您可能不需要composeToPosition()调用,它实际上可能是一个性能问题,在循环中执行多次。我把这个留给你决定。
下面是我使用的代码(减去html变量的声明)。我修改的相关代码位于for each循环中:
var container:Sprite = new Sprite;
stage.addChild(container);
var textFlow:TextFlow = TextConverter.importToFlow(html, TextConverter.TEXT_FIELD_HTML_FORMAT);
var controller:ContainerController = new ContainerController(container, 200,200);
textFlow.flowComposer.addController(controller);
textFlow.flowComposer.updateAllControllers();
var links:Array = findLinkElement(textFlow, []);
// modified this code
for each (var le:LinkElement in links){
var abs:int = le.getAbsoluteStart();
var composer:IFlowComposer = le.getTextFlow().flowComposer;
composer.composeToPosition(abs);
var textFlowLine:TextFlowLine = composer.findLineAtPosition(abs);
var tl:TextLine = textFlowLine.getTextLine(true);
var rect:Rectangle = tl.getAtomBounds(tl.getAtomIndexAtCharIndex(abs));
}https://stackoverflow.com/questions/14946722
复制相似问题