создание и отображение текстаFlash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий
Классы, включенные во Flash Text Engine, позволяют создавать, форматировать и контролировать текст. Перечисленные ниже классы являются основными элементами для создания и отображения текста с помощью Flash Text Engine:
TextElement/GraphicElement/GroupElement включают в себя содержимое экземпляра TextBlock
ElementFormat указывает атрибуты форматирования для содержимого экземпляра TextBlock;
TextBlock представляет собой основной фабрику для создания абзаца текста;
TextLine — это строка текста, созданная из экземпляра TextBlock.
Чтобы отобразить текст, создайте объект TextElement на основе переменной String с использованием объекта ElementFormat для задания характеристик форматирования. Назначьте элемент TextElement свойству content объекта TextBlock. Создайте строки текста для отображения посредством вызова метода TextBlock.createTextLine(). Метод createTextLine() возвращает объект TextLine, содержащий ту часть строки, которая соответствует заданной ширине. Циклически вызывайте метод, пока вся строка не будет отформатирована в строках. После создания всех необходимых строк свойству textLineCreationResult объекта TextBlock присваивается значение TextLineCreationResult.COMPLETE. Чтобы показать строки, добавьте их в список отображения (с соответствующими значениями расположения x и y).
Например, в следующем коде используются эти классы FTE для отображения текста «Hello World! This is Flash Text Engine!» (Здравствуй, мир! Это Flash Text Engine!) с использование значений по умолчанию для формата и шрифта. В этом простом примере создается только одна строка текста.
package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class HelloWorldExample extends Sprite
{
public function HelloWorldExample()
{
var str = "Hello World! This is Flash Text Engine!";
var format:ElementFormat = new ElementFormat();
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
var textLine1:TextLine = textBlock.createTextLine(null, 300);
addChild(textLine1);
textLine1.x = 30;
textLine1.y = 30;
}
}
}
Параметры для createTextLine() указывают строку, с которой должна начинаться новая строка, а также ширину строки в пикселах. Как правило, строкой, с которой должна начинаться новая строка, является предыдущая строка, но в случае с первой строкой используется значение null.
Добавление объектов GraphicElement и GroupElement
Объекту TextBlock можно присвоить объект GraphicElement, чтобы отобразить изображение или графический элемент. Создайте экземпляр класса GraphicElement, содержащий графику или изображение, и назначьте его свойству TextBlock.content. Создайте текстовую строку с помощью метода TextBlock.createTextline() стандартным способом. В следующем примере создаются две строки, одна с объектом GraphicElement, а другая с объектом TextElement. package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GraphicElementExample extends Sprite
{
public function GraphicElementExample()
{
var str:String = "Beware of Dog!";
var triangle:Shape = new Shape();
triangle.graphics.beginFill(0xFF0000, 1);
triangle.graphics.lineStyle(3);
triangle.graphics.moveTo(30, 0);
triangle.graphics.lineTo(60, 50);
triangle.graphics.lineTo(0, 50);
triangle.graphics.lineTo(30, 0);
triangle.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement:GraphicElement = new GraphicElement(triangle, triangle.width, triangle.height, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = graphicElement;
var textLine1:TextLine = textBlock.createTextLine(null, triangle.width);
textLine1.x = 50;
textLine1.y = 110;
addChild(textLine1);
var textElement:TextElement = new TextElement(str, format);
textBlock.content = textElement;
var textLine2 = textBlock.createTextLine(null, 300);
addChild(textLine2);
textLine2.x = textLine1.x - 30;
textLine2.y = textLine1.y + 15;
}
}
}
Можно создать объект GroupElement для создания группы объектов TextElement, GraphicElement и других объектов GroupElement. Объект GroupElement можно назначить свойству content объекта TextBlock. Параметром конструктора GroupElement() является Vector, который указывает на текстовые, графические или групповые элементы, включенные в группу. В следующем примере группируются два графических элемента и один текстовый, и полученная группа присваивается текстовому блоку. package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GroupElementExample extends Sprite
{
public function GroupElementExample()
{
var str:String = "Beware of Alligators!";
var triangle1:Shape = new Shape();
triangle1.graphics.beginFill(0xFF0000, 1);
triangle1.graphics.lineStyle(3);
triangle1.graphics.moveTo(30, 0);
triangle1.graphics.lineTo(60, 50);
triangle1.graphics.lineTo(0, 50);
triangle1.graphics.lineTo(30, 0);
triangle1.graphics.endFill();
var triangle2:Shape = new Shape();
triangle2.graphics.beginFill(0xFF0000, 1);
triangle2.graphics.lineStyle(3);
triangle2.graphics.moveTo(30, 0);
triangle2.graphics.lineTo(60, 50);
triangle2.graphics.lineTo(0, 50);
triangle2.graphics.lineTo(30, 0);
triangle2.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement1:GraphicElement = new GraphicElement(triangle1, triangle1.width, triangle1.height, format);
var textElement:TextElement = new TextElement(str, format);
var graphicElement2:GraphicElement = new GraphicElement(triangle2, triangle2.width, triangle2.height, format);
var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>();
groupVector.push(graphicElement1, textElement, graphicElement2);
var groupElement = new GroupElement(groupVector);
var textBlock:TextBlock = new TextBlock();
textBlock.content = groupElement;
var textLine:TextLine = textBlock.createTextLine(null, 800);
addChild(textLine);
textLine.x = 100;
textLine.y = 200;
}
}
}
Замена текста
Чтобы заменить текст в экземпляре TextBlock, нужно вызвать метод TextElement.replaceText(), который заменит текст в объекте TextElement, назначенном свойству TextBlock.content.
В следующем примере используется метод repaceText(), который сначала вставляет текст в начало строки, затем добавляет текст в конец строки и, наконец, заменяет текст в середине строки. package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class ReplaceTextExample extends Sprite
{
public function ReplaceTextExample()
{
var str:String = "Lorem ipsum dolor sit amet";
var fontDescription:FontDescription = new FontDescription("Arial");
var format:ElementFormat = new ElementFormat(fontDescription);
format.fontSize = 14;
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
createLine(textBlock, 10);
textElement.replaceText(0, 0, "A text fragment: ");
createLine(textBlock, 30);
textElement.replaceText(43, 43, "...");
createLine(textBlock, 50);
textElement.replaceText(23, 28, "(ipsum)");
createLine(textBlock, 70);
}
function createLine(textBlock:TextBlock, y:Number):void {
var textLine:TextLine = textBlock.createTextLine(null, 300);
textLine.x = 10;
textLine.y = y;
addChild(textLine);
}
}
}
Метод replaceText() заменяет текст, заданный параметрами beginIndex и endIndex, текстом, определенном в параметре newText. Если значения beginIndex и endIndex имеют одинаковое значение, метод replaceText() вставляет указанный текст в этом местоположении. В противном случае он заменяет символы в диапазоне от beginIndex до endIndex новым текстом.
|
|