создание динамического прямоугольника - PullRequest
0 голосов
/ 03 января 2011

Здравствуйте, мне интересно, как я могу создать динамический прямоугольник, в котором есть какой-то текст, текст динамический, поэтому прямоугольник должен адаптироваться к длине текста. Есть идеи как подойти к этому?

Ответы [ 3 ]

0 голосов
/ 03 января 2011

Другой способ, если вы хотите нарисовать свой прямоугольник во Flash вместо ActionScript (хотя описанный выше способ может быть более полезным).

Создайте слой с прямоугольником.

Сделайте прямоугольник своего рода графикой или спрайтом и установите для него 9-фрагментное масштабирование.Таким образом, прямоугольник будет правильно масштабироваться с текстовым полем (хорошо, если это прямоугольник с закругленными углами)

Также выберите Linkage для прямоугольника и присвойте ему имя класса (скажем, «Background»)

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);

Я обычно меняю высоту в зависимости от текста, устанавливаю ширину на фиксированную ширину и устанавливаю мое положение так, как якак.

0 голосов
/ 04 января 2011

Если 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;
   }
0 голосов
/ 03 января 2011

вот основной для однострочного текста:

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);

Роб

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...