Creación y visualización de textoFlash Player 10 y posterior, Adobe AIR 1.5 y posterior
Las clases que conforman Flash Text Engine permiten crear texto, aplicarle formato y controlarlo. Las clases siguientes son los componentes esenciales para crear y mostrar texto con Flash Text Engine:
TextElement/GraphicElement/GroupElement: incluyen el contenido de una instancia de TextBlock.
ElementFormat: especifica los atributos de formato para el contenido de una instancia de TextBlock.
TextBlock - componente fundamental para crear un párrafo de texto.
TextLine: una línea de texto creada a partir de TextBlock
Para mostrar el texto, cree un objeto TextElement a partir de una cadena y usando un objeto ElementFormat para especificar las características de formato. Asigne TextElement a la propiedad content de un objeto TextBlock. Las líneas de texto que se van a mostrar se crean llamando al método TextBlock.createTextLine(). El método createTextLine() devuelve un objeto TextLine que contiene parte de la cadena que se ajustará en la anchura especificada. Llame al método varias veces hasta que a toda la cadena se le haya aplicado el formato en líneas. Cuando no haya más líneas que crear, a la propiedad textLineCreationResult del objeto se le asigna el valor: TextLineCreationResult.COMPLETE. Para mostrar las líneas, añádalas a la lista de visualización (con los valores de posición x e y apropiados).
Por ejemplo, el código siguiente utiliza estas clases de FTE para mostrar el texto "Hello World! This is Flash Text Engine!", usando el formato y los valores de fuente predeterminados. En este sencillo ejemplo, únicamente se crea una sola línea de texto.
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;
}
}
}
Los parámetros para createTextLine() especifican la línea a partir de la que comienza la nueva línea y su anchura en píxeles. La línea a partir de la que comienza la nueva línea suele ser la anterior pero, en caso de que sea la primera línea, es null.
Cómo añadir objetos GraphicElement y GroupElement
Para mostrar una imagen o un elemento gráfico, se puede asignar un objeto GraphicElement a un objeto TextBlock. Únicamente se debe crear una instancia de la clase GraphicElement a partir de un gráfico o una imagen y asignar la instancia a la propiedad TextBlock.content. Cree la línea de texto llamando a TextBlock.createTextline() tal y como lo haría normalmente. El ejemplo siguiente crea dos líneas de texto, una con un objeto GraphicElement y otra con un objeto 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;
}
}
}
Se puede crear un objeto GroupElement para crear un grupo de objetos TextElement, GraphicElement y otros objetos de tipo GroupElement. GroupElement se puede asignar a la propiedad content de un objeto TextBlock. El parámetro pasado al constructor GroupElement() es un Vector, que apunta a los elementos de texto, gráficos y grupo que conforman el grupo. El ejemplo siguiente agrupa dos elementos gráficos y un elemento de texto y los asigna como una unidad a un bloque de texto. 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;
}
}
}
Reemplazo de texto
Se puede reemplazar texto en una instancia de TextBlock llamando a TextElement.replaceText() para reemplazar el texto del elemento TextElement que asignó a la propiedad TextBlock.content.
En el ejemplo siguiente se utiliza repaceText() para insertar texto al principio de la línea, añadir texto al final de la línea y reemplazar texto en medio de la línea. 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);
}
}
}
El método replaceText() reemplaza el texto especificado por los parámetros beginIndex y endIndex con el texto que especifica el parámetro newText. Si los valores de los parámetros beginIndex y endIndex son los mismos, replaceText() inserta el texto especificado en esa ubicación. De lo contrario, reemplaza los caracteres especificados mediante beginIndex y endIndex con el nuevo texto.
|
|