您好我想知道如何创建一个动态矩形,其中包含一些文本,文本是动态的,因此矩形必须适应文本的长度。关于如何处理这个的任何想法?
答案 0 :(得分:0)
这是单行文本的基本内容:
import flash.display.Sprite;
import flash.text.TextField;
var rectClip:Sprite = new Sprite();
var rect:Sprite = new Sprite;
rect.graphics.beginFill(0xff0000, 1);
rect.graphics.drawRect(0, 0, 100, 100);
rect.graphics.endFill();
var tf:TextField = new TextField();
tf.autoSize = "left";
tf.text = "Lorem ipsum dolor sit amet...";
addChild(rectClip);
rectClip.addChild(rect);
rectClip.addChild(tf);
rect.width = tf.textWidth + 12;
rect.height = tf.textHeight + 12;
tf.x = Math.round(rect.width/2 - tf.width/2);
tf.y = Math.round(rect.height/2 - tf.height/2);
罗布
答案 1 :(得分:0)
另一种方法,如果你想在Flash中绘制矩形而不是动作脚本(尽管上面的方法可能更有用)。
创建一个带矩形的图层。
使矩形成为某种图形或精灵,并将其设置为9切片缩放。这样,矩形将使用文本框正确缩放(如果它是圆角矩形,则很好)
同时为矩形选择Linkage并为其指定一个类名(例如“背景”)
public var textBackground:Background; // can make public or private depending if you leave it on the stage or generate it
private var myTextField:TextField;
然后有两个功能:
private function createTextField():void
{
// create your textfield here using actionscript
myTextField = new TextField();
// customize your textfield
}
private function createTextBackground():void
{
textBackground = new Background;
textBackground.height = myTextField.height + 20;
}
然后:
createTextField();
createTextBackground();
addChild(textBackground);
addChild(myTextField);
我通常会根据文字更改高度,并将宽度设置为固定宽度,并按照我喜欢的方式设置我的定位。
答案 2 :(得分:0)
如果TextField是多线,则需要设置固定宽度,然后可以在格式化后确定TextField高度。
private var format:TextFormat = new TextFormat();
private var textWidth:int = 300;
private var hPadding:int = 10;
private var vPadding:int = 10;
private var boxColor:uint = 0x990000;
private function init():void
{
var tf:TextField = getTextField("Your text..........etc...");
tf.x = hPadding;
tf.y = vPadding;
var rectWidth:int = textWidth + ( hPadding * 2);
var rectHeight:int = tf.textHeight + ( vPadding * 2);
var container:Sprite = getTextContainer( rectWidth , rectHeight );
container.addChild( tf );
}
private function getTextField( text:String ):TextField
{
var tf:TextField = new TextField();
tf.defaultTextFormat = format;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.multiline = true;
tf.width = textWidth;
tf.text = text;
// etc...
return tf;
}
private function getTextContainer(width:int , height:int ):Sprite
{
var sp:Sprite = new Sprite();
with( sp.graphics )
{
beginFill( boxColor );
drawRect( 0 , 0 , width , height );
endFill();
}
return sp;
}