?
自定义类(BroadCastMarquee.as):
package marquee
{
??? import flash.events.MouseEvent;
??? import flash.events.TimerEvent;
??? import flash.geom.Rectangle;
??? import flash.text.TextField;
??? import flash.text.TextFieldAutoSize;
??? import flash.text.TextFormat;
??? import flash.utils.Timer;
???
??? import mx.core.UIComponent;
???
??? /**
??? *?
????? * 信息滚动显示(跑马灯控件)
????? * @version
??? * <pre>
??? * 修改版本: 1.0.0
??? * 修改日期:2009-1-15
??? * 修改人 : zhang
??? * 修改说明:形成初始版本
??? *</pre>?
?????? *?
??? * * 功能:
??? * 1.直接将某TextField转换为跑马灯文本 changeTextFieldToMarqueeText?
??? * 2.动态设定显示宽度 width
??? * 3.动态设定一次移动间隔时间 delay
??? * 4.动态设定一次移动间隔距离 step
??? * 5.设定默认文本显示样式 defaultTextFormat
??? * 6.动态设定文本显示样式 setTextFormat
??? * */?
??? public class BroadCastMarquee extends UIComponent?
????? {?
????????
????????? [Bindable]?
?????????? private var broadcastText:String="broadcast message";?
???????
?????????? private var m_timer:Timer;?
???????
?????????? private var m_DefaultText_X:Number=0;?
?????????
?????????? //每次移动距离?
??????? private var m_step:Number=10;?
???????????
?????????? //滚动范围?
??????? private var m_rect:Rectangle;?
???????????
??????? //移动时间间隔?
??????? private var t_delay:Number=100;?
???????????
??????? //广播信息滚动宽度?
??????? private var m_Width:Number;?
????????
??????? //滚动方向属性?
??????? [Inspectable(defaultValue="left",enumeration="right,left",category="direction",type="String")]?
??????? public var ScrollDirection:String="left";?
????????
????????
?????????? //显示内容样式?
?????????? [Bindable]?
?????????? private var m_TextFormat:TextFormat=new TextFormat("Verdana","10","#0b333c");?
????????
?????? /**广播信息内容显示控件*/?
?????? private var m_BroadCastText:TextField;?
???????
????? // private var m_BroadcastLabel:Label;?
????????
?????? public function BroadCastMarquee()?
?????? {?
?????????? super();?
????????????
?????????? InitBroadcast();?
????????????
?????????? addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler);?
?????????? addEventListener(MouseEvent.ROLL_OUT,rollOutHandler);?
????????????
?????? }?
????????
?????? /**初始化*/?
?????? private function InitBroadcast():void?
?????? {?
?????????? /**广播信息显示控件初始化*/?
?????????? m_BroadCastText=new TextField();?
?????????? m_BroadCastText.autoSize=TextFieldAutoSize.LEFT;?
?????????? m_BroadCastText.multiline=false;?
?????????? m_BroadCastText.selectable=false;?
?????????? m_BroadCastText.x=m_BroadCastText.y=m_DefaultText_X?
?????????? m_BroadCastText.wordWrap=false;?
?????????? m_BroadCastText.text=broadcastText;?
?????????? //m_BroadCastText.defaultTextFormat=m_TextFormat;?
?????????? addChild(m_BroadCastText);?
????????????
????????????
?????????? this.m_Width=this.width;?
?????????? m_rect=new Rectangle(0,this.width,this.m_BroadCastText.textHeight);?
?????????? this.m_BroadCastText.scrollRect=m_rect;?
?????????????
????????????? m_timer = new Timer(t_delay);?
???????????????
???????????? ScrollBroadText();?
???????????????
????????????
?????????? }??
????????
?????? /**
??????? * 如果有新的广播消息,或者长度改变进行滚动显示
??????? * */?
?????????? private function ScrollBroadText():void?
????????? {?
?????????? if(this.m_timer!=null)?
????????? {?
????????????????? //停止移动?
?????????????? StopMoveBroadcast();?
????????????????
?????????????? if(this.broadcastText!="")?
?????????????? {?
?????????????????? m_timer.addEventListener(TimerEvent.TIMER,timerhandler);?
?????????????????? m_timer.start();?
?????????????? }?
????????????? // Math.abs(?
??????????????????
????????? }?
????????? }?
???????
????? /**控制滚动信息*/?
????????? private function timerhandler(evt:TimerEvent):void?
??????? {?
????????? if(this.m_BroadCastText.textWidth>0)?
????????? {?
???????????????
???????????? if(ScrollDirection.toLowerCase()=="left")?
?????????????? {?
???????????????????
??????????????????? if(m_rect.x<=this.m_BroadCastText.textWidth)?
???????????????????? {?
????????????????????? //? this.m_BroadCastText.x+=(-this.m_step);?
?????????????????????? m_rect.x+=this.m_step;?
?????????????????????????
???????????????????? }else?
???????????????????? {?
??????????????????????? //this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth;?
??????????????????????? m_rect.x=-(m_DefaultText_X+this.m_Width);?
???????????????????? }?
??????????????????????
???
????????????? }else?
????????????? {?
?????????????????
???????????????? if(Math.abs(m_rect.x)<=this.m_BroadCastText.textWidth)?
???????????????? {?
???????????????????? m_rect.x-=this.m_step;?
?????????????????????
???????????????? }else?
???????????????? {?
??????????????????? this.m_rect.x=m_DefaultText_X;?
????????????????????
???????????????? }?
?????????????????
??????????? }?
????????????
?????????? m_BroadCastText.scrollRect = m_rect;???
????????????
???????? }else?
???????? {?
???????????? //停止移动?
???????????? StopMoveBroadcast();?
????????? }?
??????????
??????????
?????????????
??????????? }?
?????????
??????? /**停止移动*/?
???????????? private function StopMoveBroadcast():void?
??????????? {?
???????????????? if(m_timer!=null)?
????????? {?
??????????? this.m_timer.stop();?
???????????? if(m_timer.hasEventListener(TimerEvent.TIMER))?
???????????????? m_timer.removeEventListener(TimerEvent.TIMER,timerhandler);?
???????????????
?????????????? m_BroadCastText.x=this.m_DefaultText_X;?
?????????????? m_rect.height = m_BroadCastText.height;?
?????????????? // this.height=m_rect.height;?
?????????????? m_BroadCastText.scrollRect = m_rect;?
?????????? }?
??????? }?
??????
??????
???? /**************************广播信息处理事件*********************************/?
??????
???? /**鼠标经过处理事件*/?
???????? protected function rollOverHandler(event:MouseEvent):void?
??????? {?
???????????? if(this.m_timer!=null&&this.broadcastText!="")?
???????????? {?
???????????????? this.m_timer.stop();?
???????????? }?
??????? }?
?????????
??????? /**鼠标离开处理事件*/?
??????? protected function rollOutHandler(event:MouseEvent):void?
??????? {?
????????? if(this.m_timer!=null&&this.broadcastText!="")?
???????????? {?
???????????????? this.m_timer.start();?
???????????? }?
??????? }?
?????????
??????
????? /**************************广播信息属性*************************************/?
??????
???? /**移动时间间隔*/?
???????? public function set BroadCastDeplay(value:Number):void?
????????? {?
???????????? this.m_timer.delay=value;??????????
????????? }?
??????
???? /**设置广播信息内容*/?
????????? public function set BroadCastText(value:String):void?
???????? {?
???????????? this.m_BroadCastText.text=value;?
???????????? ScrollBroadText();?
???????? }?
??????
???? /**取得广播信息内容*/?
???????? public function get BroadCastText():String?
???????? {?
???????????? return this.broadcastText;?
???????? }?
??????
??????
???? /**广播信息宽度宽度*/?
???????? public override function get width():Number?
???????? {?
???????????? return this.m_Width;?
???????? }?
??????
??????? public override function set width(width:Number):void?
??????? {?
????????????? this.m_Width=width;?
???????????? this.m_rect.width=this.m_Width;?
??????????? this.m_BroadCastText.scrollRect=this.m_rect;?
??????????? ScrollBroadText();?
????????? //? this.m_BroadCastText.setTextFormat?
??????? }?
??????
??????
???????? /**设置滚动方向('left' or 'right')*/?
???????? public function set Direction(value:String):void?
????????? {?
????????????? this.ScrollDirection=value;?
???????????? ScrollBroadText();?
???????? }?
??????
??????
???????? /**设置字体格式化样式*/?
???????? public function set defaultTextFormat(format:TextFormat):void?
???????? {?
???????????? this.m_BroadCastText.defaultTextFormat=format;?
???????????? this.setTextFormat(format);?
???????? //?
???????? }?
??????
???????? public function setTextFormat(format:TextFormat,beginIndex:int = -1,endIndex:int = -1):void?
??????? {?
??????????? m_BroadCastText.setTextFormat(format,beginIndex,endIndex);?
??????????? ScrollBroadText();?
??????? }?
??????
???????
???????? /**字体大小*/?
???????? public function set fontSize(value:Object):void?
???????? {?
???????????? this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value,this.m_TextFormat.color);?
???????????? this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);?
???????????
???????? }?
??????
???????? /**字体名称*/?
???????? public function set fontFamily(value:String):void?
???????? {?
???????????? this.m_TextFormat=new TextFormat(value,this.m_TextFormat.size,this.m_TextFormat.color);?
??????????? this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1);?
???????? }?
??????
???????? /**字体颜色*/?
???????? public function set color(value:Object):void?
???????? {?
???????????? this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value);?
???????????? this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1);?
???????? }?
??????
???????? /**是否是粗体*/?
???????? public function set fontWeight(value:Object):void?
???????? {?
???????????? this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.color,value)?
???????????? this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1);?
???????? }?
??? }??
}
?
?
TestBroadCastMarquee.mxml :
<?xml version="1.0" encoding="utf-8"?>?
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"? layout="absolute" creationComplete="init()" xmlns:marquee="marquee.*">?
??? <marquee:BroadCastMarquee width="500" height="25" BroadCastDeplay="800" BroadCastText="公告:火爆商品等你拿!" ScrollDirection="left">?????????
??? </marquee:BroadCastMarquee>?????
</mx:Application>?
?
本文转自 http://blog.csdn.net/xuhuanchao/article/details/4939542