字体旋转竖排,最近一直在网上找,大多是利用TLF等,太麻烦.终于被我找到了集成Sprit来解决这个问题,封装了一下,贴出来,备用:
集成Sprit的核心类
package { import flash.display.Sprite; import flash.text.engine.ElementFormat; import flash.text.engine.FontDescription; import flash.text.engine.TextBlock; import flash.text.engine.TextElement; import flash.text.engine.TextLine; import flash.text.engine.TextRotation; public class RoutaTextAs extends Sprite{//"MS Mincho" 一个字体 /** * 旋转字体 * @param text 待旋转的文档 * @param fontSize * @param fontType * @param rotate 旋转度 * @param theHeight 高 * @param theWidth 宽 * @param x * @param y * @param spaceBetween 字体空间 * */ public function RoutaTextAs(text:String="" , fontSize:int=15 , fontType:String="宋体" , rotate:String= TextRotation.ROTATE_90 , theHeight:int=60 , theWidth:int=60, x:int=0 , y:int=0 , spaceBetween:int=20):void { var format:ElementFormat = new ElementFormat(); format.fontSize = fontSize; format.fontDescription = new FontDescription(fontType); var textBlock:TextBlock = new TextBlock(); textBlock.content = new TextElement(text, format); textBlock.lineRotation = rotate;//方向 var linePosition:Number =x; var previousLine:TextLine = null; while (true) { var textLine:TextLine = textBlock.createTextLine(previousLine, theHeight); trace(this.width); if (textLine == null || this.width > theWidth) { break; } textLine.y = y; textLine.x = linePosition; linePosition -= spaceBetween; addChild(textLine); previousLine = textLine; } } } }
Spirt必须add在UIComponent里面,包装了一层,可以直接使用:
<?xml version="1.0" encoding="utf-8"?> <mx:UIComponent xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()"> <mx:Script> <![CDATA[ import flash.text.engine.TextRotation; import mx.events.FlexEvent; public var text:String = "";//要加入的字体 public var fontSize:int = 15 ; public var fontType:String ="宋体"; public var rotate:String = TextRotation.ROTATE_90;//旋转角度 public var spaceBetween:int = 18;//旋转角度 protected function init():void{ var tt:RoutaTextAs = new RoutaTextAs(text , fontSize , fontType , rotate , this.height , this.width ,this.x , this.y , spaceBetween); this.addChild(tt); } ]]> </mx:Script> </mx:UIComponent>
一些参数需要自己调整,下面是Application
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="application1_initializeHandler(event)"> <mx:Script> <![CDATA[ import flash.text.engine.TextRotation; import mx.core.UIComponent; import mx.events.FlexEvent; protected function application1_initializeHandler(event:FlexEvent):void{ var rr:RoutaText = new RoutaText(); rr.height = 60; rr.width = 150; rr.spaceBetween = 55; rr.text = "猩红的撒旦斯蒂芬桑德菲杰撒" + "地方速度快李凤江桑德菲杰思考了打飞机克里" + "斯丁积分卡螺丝刀积分卡螺丝" + "刀杰弗里斯大开间付款了三等奖分散度看了 飞"; ttt.addChild(rr); } ]]> </mx:Script> <mx:Box id="ttt" x="409" y="151" width="250"/> </mx:Application>
用吧!
RoutaTextAs 修改了一下.支持横排很竖排 package { import flash.display.Sprite; import flash.text.engine.ElementFormat; import flash.text.engine.FontDescription; import flash.text.engine.TextBlock; import flash.text.engine.TextElement; import flash.text.engine.TextLine; import flash.text.engine.TextRotation; public class RoutaTextAs extends Sprite{//"MS Mincho" 一个字体 /** * 旋转字体 * @param text 待旋转的文档 * @param fontSize * @param fontType * @param rotate 旋转度 * @param theHeight 高 * @param theWidth 宽 * @param x * @param y * @param spaceBetween 字体空间 * */ public function RoutaTextAs(text:String="" , fontSize:int=15 , fontType:String="宋体" , rotate:String= TextRotation.ROTATE_90 , theHeight:int=60 , theWidth:int=60, x:int=0 , y:int=0 , spaceBetween:int=20):void { var format:ElementFormat = new ElementFormat(); format.fontSize = fontSize; format.fontDescription = new FontDescription(fontType); var textBlock:TextBlock = new TextBlock(); textBlock.content = new TextElement(text, format); textBlock.lineRotation = rotate;//方向 var previousLine:TextLine = null; if(rotate == TextRotation.ROTATE_90){ var linePosition:Number = x; while (true) { var textLine:TextLine = textBlock.createTextLine(previousLine, theHeight); if (textLine == null || this.width > theWidth) { break; } textLine.y = y; textLine.x = linePosition; linePosition += spaceBetween; addChild(textLine); previousLine = textLine; } }else if(rotate == TextRotation.ROTATE_0){ var linePosition:Number = y + fontSize ; while (true) { var textLine:TextLine = textBlock.createTextLine(previousLine, theWidth); if (textLine == null ||( this.height+fontSize) >= theHeight) { break; } textLine.y = linePosition; textLine.x = x; linePosition += spaceBetween; addChild(textLine); previousLine = textLine; } } } } }