您的位置:首页 > 其它

Flex “跑马灯”效果(自定义“跑马灯”控件)

2009-07-20 21:17 525 查看
自定义类(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,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,-1);
}

/**字体颜色*/
public function set color(value:Object):void
{
this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,value);
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}

/**是否是粗体*/
public function set fontWeight(value:Object):void
{
this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,this.m_TextFormat.color,value)
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}
}
}

TestBroadCastMarquee.mxml :

view plaincopy to clipboardprint?
<?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>

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lucky_cxj/archive/2009/04/21/4096904.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐