[转] 用flex4制作跑马灯效果

自定义类 BroadCastMarquee.as

 

  1 package utils
  2 {
  3     import flash.events.MouseEvent;
  4     import flash.events.TimerEvent;
  5     import flash.geom.Rectangle;
  6     import flash.text.TextField;
  7     import flash.text.TextFieldAutoSize;
  8     import flash.text.TextFormat;
  9     import flash.utils.Timer;
 10     
 11     import mx.core.UIComponent;
 12     
 13     public class BroadCastMarquee extends UIComponent
 14     {    
 15         
 16         [Bindable] 
 17         private var broadcastText:String="broadcast message"
 18         
 19         private var m_timer:Timer
 20         
 21         private var m_DefaultText_X:Number=0
 22         
 23         //每次移动距离 
 24         private var m_step:Number=10
 25         
 26         //滚动范围 
 27         private var m_rect:Rectangle; 
 28         
 29         //移动时间间隔 
 30         private var t_delay:Number=100
 31         
 32         //广播信息滚动宽度 
 33         private var m_Width:Number; 
 34         
 35         //滚动方向属性 
 36         [Inspectable(defaultValue="left",enumeration="right,left", category="direction", type="String")] 
 37         public var ScrollDirection:String="left";         
 38         
 39         //显示内容样式 
 40         [Bindable] 
 41         private var m_TextFormat:TextFormat=new TextFormat("Verdana","10","#0b333c"); 
 42         
 43         /**广播信息内容显示控件*/ 
 44         private var m_BroadCastText:TextField; 
 45         
 46         // private var m_BroadcastLabel:Label; 
 47         
 48         public function BroadCastMarquee() 
 49         { 
 50             super(); 
 51             
 52             InitBroadcast(); 
 53             
 54             addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler); 
 55             addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);             
 56         } 
 57         
 58         /**初始化*/ 
 59         private function InitBroadcast():void 
 60         { 
 61             /**广播信息显示控件初始化*/ 
 62             m_BroadCastText=new TextField(); 
 63             m_BroadCastText.autoSize=TextFieldAutoSize.LEFT; 
 64             m_BroadCastText.multiline=false
 65             m_BroadCastText.selectable=false
 66             m_BroadCastText.x=m_BroadCastText.y=m_DefaultText_X 
 67             m_BroadCastText.wordWrap=false
 68             m_BroadCastText.text=broadcastText; 
 69             //m_BroadCastText.defaultTextFormat=m_TextFormat; 
 70             addChild(m_BroadCastText); 
 71             
 72             
 73             this.m_Width=this.width; 
 74             m_rect=new Rectangle(0,0,this.width,this.m_BroadCastText.textHeight); 
 75             this.m_BroadCastText.scrollRect=m_rect; 
 76             
 77             m_timer = new Timer(t_delay); 
 78             
 79             ScrollBroadText(); 
 80         }  
 81         
 82         /**
 83          * 如果有新的广播消息,或者长度改变进行滚动显示
 84          * */ 
 85         private function ScrollBroadText():void 
 86         { 
 87             if(this.m_timer!=null
 88             { 
 89                 //停止移动 
 90                 StopMoveBroadcast(); 
 91                 
 92                 if(this.broadcastText!=""
 93                 { 
 94                     m_timer.addEventListener(TimerEvent.TIMER, timerHandler); 
 95                     m_timer.start(); 
 96                 }
 97             } 
 98         } 
 99         
100         /**控制滚动信息*/ 
101         private function timerHandler(evt:TimerEvent):void 
102         { 
103             if(this.m_BroadCastText.textWidth>0
104             { 
105                 
106                 if(ScrollDirection.toLowerCase()=="left"
107                 { 
108                     
109                     if(m_rect.x<=this.m_BroadCastText.textWidth) 
110                     { 
111                         //  this.m_BroadCastText.x+=(-this.m_step); 
112                         m_rect.x+=this.m_step; 
113                         
114                     }else 
115                     { 
116                         //this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth; 
117                         m_rect.x=-(m_DefaultText_X+this.m_Width); 
118                     } 
119                 }
120                 else 
121                 { 
122                     
123                     if(Math.abs(m_rect.x)<=this.m_BroadCastText.textWidth) 
124                     { 
125                         m_rect.x-=this.m_step;                         
126                     }
127                     else 
128                     { 
129                         this.m_rect.x=m_DefaultText_X;                        
130                     }                     
131                 }                
132                 m_BroadCastText.scrollRect = m_rect;   
133                 
134             }else 
135             { 
136                 //停止移动 
137                 StopMoveBroadcast(); 
138             } 
139         } 
140         
141         /**停止移动*/ 
142         private function StopMoveBroadcast():void 
143         { 
144             if(m_timer!=null
145             { 
146                 this.m_timer.stop(); 
147                 if(m_timer.hasEventListener(TimerEvent.TIMER)) 
148                     m_timer.removeEventListener(TimerEvent.TIMER, timerHandler); 
149                 
150                 m_BroadCastText.x=this.m_DefaultText_X; 
151                 m_rect.height = m_BroadCastText.height; 
152                 // this.height=m_rect.height; 
153                 m_BroadCastText.scrollRect = m_rect; 
154             } 
155         } 
156         
157         
158         /**************************广播信息处理事件*********************************/ 
159         
160         /**鼠标经过处理事件*/ 
161         protected function rollOverHandler(event:MouseEvent):void 
162         { 
163             if(this.m_timer!=null&&this.broadcastText!=""
164             { 
165                 this.m_timer.stop(); 
166             } 
167         } 
168         
169         /**鼠标离开处理事件*/ 
170         protected function rollOutHandler(event:MouseEvent):void 
171         { 
172             if(this.m_timer!=null&&this.broadcastText!=""
173             { 
174                 this.m_timer.start(); 
175             } 
176         }        
177         
178         /**************************广播信息属性*************************************/ 
179         
180         /**移动时间间隔*/ 
181         public function set BroadCastDeplay(value:Number):void 
182         { 
183             this.m_timer.delay=value;          
184         } 
185         
186         /**设置广播信息内容*/ 
187         public function set BroadCastText(value:String):void 
188         { 
189             this.m_BroadCastText.text=value; 
190             ScrollBroadText(); 
191         } 
192         
193         /**取得广播信息内容*/ 
194         public function get BroadCastText():String 
195         { 
196             return this.broadcastText; 
197         } 
198         
199         
200         /**广播信息宽度宽度*/ 
201         public override function get width():Number 
202         { 
203             return this.m_Width; 
204         } 
205         
206         public override function set width(width:Number):void 
207         { 
208             this.m_Width=width; 
209             this.m_rect.width=this.m_Width; 
210             this.m_BroadCastText.scrollRect=this.m_rect; 
211             ScrollBroadText(); 
212             //this.m_BroadCastText.setTextFormat 
213         } 
214         
215         
216         /**设置滚动方向('left' or 'right')*/ 
217         public function set Direction(value:String):void 
218         { 
219             this.ScrollDirection=value; 
220             ScrollBroadText(); 
221         } 
222         
223         
224         /**设置字体格式化样式*/ 
225         public function set defaultTextFormat(format:TextFormat):void 
226         { 
227             this.m_BroadCastText.defaultTextFormat=format; 
228             this.setTextFormat(format);            
229         } 
230         
231         public function setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void 
232         { 
233             m_BroadCastText.setTextFormat(format, beginIndex, endIndex); 
234             ScrollBroadText(); 
235         } 
236         
237         
238         /**字体大小*/ 
239         public function set fontSize(value:Object):void 
240         { 
241             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value,this.m_TextFormat.color); 
242             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1); 
243             
244         } 
245         
246         /**字体名称*/ 
247         public function set fontFamily(value:String):void 
248         { 
249             this.m_TextFormat=new TextFormat(value,this.m_TextFormat.size,this.m_TextFormat.color); 
250             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1); 
251         } 
252         
253         /**字体颜色*/ 
254         public function set color(value:Object):void 
255         { 
256             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,value); 
257             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1); 
258         } 
259         
260         /**是否是粗体*/ 
261         public function set fontWeight(value:Object):void 
262         { 
263             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,this.m_TextFormat.color,value) 
264             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1); 
265         } 
266     }   
267 }
268 

 

 

在mxml文件中:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
 3                xmlns:s="library://ns.adobe.com/flex/spark" 
 4                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:utils="utils.*">
 5     <fx:Declarations>
 6         <!-- Place non-visual elements (e.g., services, value objects) here -->
 7     </fx:Declarations>
 8     
 9     <utils:BroadCastMarquee width="888" height="25" BroadCastDeplay="800"  BroadCastText="公告:火爆商品等你拿!" ScrollDirection="left">
10         
11     </utils:BroadCastMarquee>
12 </s:Application>
13 

 

 

posted on 2010-08-24 19:06  SageChen  阅读(2213)  评论(1编辑  收藏  举报

导航