글
공부놀이/ActionScripT 2007. 10. 24. 17:13[3.0] 커스텀 버튼 클래스
한번 만들어봤습니다만.package CustomButton {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;public class CustomButton extends Sprite
{
private var btnTarget:Sprite;private var lbButton:TextField;
private var lbFormat:TextFormat;
private var btnName:String;
private var btnColor:uint;
private var isToggle:Boolean;
private var isTargeted:Boolean;
private var _toggled:Boolean;
public function CustomButton(mcTarget:Sprite = null, color:uint = 0xffcc33)
{
if(mcTarget == null) {
btnTarget = new Sprite();
isTargeted = false;
btnColor = color;
} else {
btnTarget = mcTarget;
isTargeted = true;
color = 0x000000;
}
btnName = "Button";
}
public function get toggled():Boolean { return _toggled; }
public function activate():void
{
this.buttonMode = true;
this.useHandCursor = true;
draw_button();
}
public function destroy():void
{
isAlive(false);
this.buttonMode = false;
var dsFormat:TextFormat = new TextFormat();
dsFormat.bold = false;
dsFormat.color = 0x777777;
lbButton.setTextFormat(dsFormat);
btnTarget.removeEventListener(MouseEvent.MOUSE_OVER, over_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_OUT, out_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_UP, up_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_DOWN, down_listener);
}
public function setToggle(val:Boolean):void
{
if(val) {
isToggle = true;
make_toggle();
} else {
isToggle = false;
}
}
public function set label(button_name:String):void
{
btnName = button_name;
addLabel();
}
public function get label():String
{
return btnName;
}
private function addLabel():void
{
if(lbButton == null){
lbButton = new TextField();
lbButton.width = btnTarget.width;
lbButton.height = 20;
lbButton.x = (this.width - lbButton.width)/2;
lbButton.y = (this.height - lbButton.height)/2;
lbButton.mouseEnabled = false;
}
lbFormat = new TextFormat();
if(!isToggle)
lbFormat.color = 0xFFFFFF;
lbFormat.bold = false;
lbFormat.size = 10;
lbFormat.align = TextFormatAlign.CENTER;
lbButton.text = btnName;
lbButton.setTextFormat(lbFormat);
this.addChild(lbButton);
}
private function addListeners():void
{
btnTarget.addEventListener(MouseEvent.MOUSE_OVER, over_listener);
btnTarget.addEventListener(MouseEvent.MOUSE_OUT, out_listener);
btnTarget.addEventListener(MouseEvent.MOUSE_DOWN, down_listener);
btnTarget.addEventListener(MouseEvent.MOUSE_UP, up_listener);
}
private function over_listener(evt:MouseEvent):void
{
//trace("over");
var ovFormat:TextFormat = new TextFormat();
ovFormat.bold = false;
ovFormat.color = 0xFFFF00;
lbButton.setTextFormat(ovFormat);
}
private function down_listener(evt:MouseEvent):void
{
//trace("down");
var dnFormat:TextFormat = new TextFormat();
dnFormat.bold = false;
dnFormat.color = 0xCCCCCC;
lbButton.setTextFormat(dnFormat);
}
private function up_listener(evt:MouseEvent):void
{
//trace("up");
lbButton.setTextFormat(lbFormat);
//dispatchEvent(new MouseEvent("customCLICK", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
//dispatchEvent(evt);
}
private function out_listener(evt:MouseEvent):void
{
//trace("out");
lbButton.setTextFormat(lbFormat);
}
private function draw_button():void
{
if(!isTargeted){
//trace("drawing button elements");
btnTarget.graphics.beginFill(btnColor);
btnTarget.graphics.drawRoundRect(0, 0, 80, 20, 5);
btnTarget.graphics.endFill();
}
this.addChild(btnTarget);
addListeners();
isAlive(true);
addLabel();
}
private function isAlive(val:Boolean):void
{
//trace("Button status change");
var rOffset:Number;
var gOffset:Number;
var bOffset:Number;
if(val) {
rOffset = 0;
gOffset = 0;
bOffset = 0;
} else {
rOffset = -125;
gOffset = -125;
bOffset = -125;
}
btnTarget.transform.colorTransform = new ColorTransform(1, 1, 1, 1, rOffset, gOffset, bOffset);
}
private function make_toggle():void
{
btnTarget.removeEventListener(MouseEvent.MOUSE_OVER, over_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_OUT, out_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_UP, up_listener);
btnTarget.removeEventListener(MouseEvent.MOUSE_DOWN, down_listener);
btnTarget.addEventListener(MouseEvent.CLICK, toggle_listener);
_toggled = false;
var tgFormat = new TextFormat();
tgFormat.bold = false;
tgFormat.color = 0x777777;
lbButton.setTextFormat(tgFormat);
}
private function toggle_listener(evt:MouseEvent):void
{
var tgFormat = new TextFormat();
if(_toggled) {
_toggled = false;
tgFormat.bold = false;
tgFormat.color = 0x777777;
dispatchEvent(new MouseEvent("customOFF", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
} else {
_toggled = true;
tgFormat.bold = true;
tgFormat.color = 0xFFFF00;
dispatchEvent(new MouseEvent("customON", evt.bubbles, evt.cancelable, evt.localX, evt.localY, evt.relatedObject, evt.ctrlKey, evt.altKey, evt.shiftKey, evt.buttonDown, evt.delta));
}
lbButton.setTextFormat(tgFormat);
//trace(_toggled);
}
}
}
3.0 에서는 굳이 이런식으로 만들 필요 없이 걍 SimpleButton 클래스를 사용하면 될 것 같습니다 -_-
그래도... 요녀석의 장점이라면... 그냥 쓰면 임의대로 Sprite 에서 버튼 모양을 그려준다는 겁니다.
그 버튼의 색도 지정할 수 있구요..
토글식으로 만들어 줄 수도 있습니다.
이경우에는 이벤트 리스너를 걸어줄 때 "customON", "customOFF" 라는 식으로 문자로 걸어주는거죠
뭐 저런건 걍 스태틱 클래스로 모아서 만들어줘도 됩니다만, 아직 제 라이브러리가 없어서 그냥 씁니다 ㅎ
사용법은 간단합니다.
import CustomButton.CustomButton;
// 우선은 Import 를 해줘야겠지요
// package 는 customUI.CustomButton 이지만.. 마음껏 수정하셔도 됩니당
var buttonInstance:CustomButton = new CustomButton(null, 0x000000);
// 앞에는 버튼이 될 무비클립, 요기서 아무것도 지정을 안해주면(null) 임의로 그려줍니다.
// 뒤에는 임의로 그려줄때 버튼의 색으로 쓸 uint 값 그냥 웹컬러 코드에 0x 붙는 시츄 -_-
buttonInstance.activate()
// 버튼 활성화를 해줘야 합니다.
buttonInstance.destroy()
// 버튼 비활성화 메서드
buttonInstance.setToggle(true)
// true, false 로 토글 버튼으로 쓸건지 말건지 정해줍니다
일단 동작은 잘 합니다.
충분한 테스트를 거치치 않은 미완성이긴 하지만... 공부겸 해서 올려둡니다.
'공부놀이 > ActionScripT' 카테고리의 다른 글
[3.0] Depth 처리 (0) | 2007.10.16 |
---|---|
[2.0] 플래시 타임라인, 다이나믹, 리버스 뎁스 관련 (0) | 2007.02.28 |
[2.0] 플래시 웹페이지 포커스 (0) | 2007.02.28 |
트랙백
댓글
글
일상놀이/심심하면 잡담놀이 2007. 10. 17. 14:44닮은꼴 유명인 찾아보기
'일상놀이 > 심심하면 잡담놀이' 카테고리의 다른 글
재미있는 도메인들 (0) | 2007.11.02 |
---|---|
이라크 피랍 관련 책 출간 (2) | 2007.10.24 |
우리나라가 미래의 인터넷 강국이 되기 위해서라면..... (0) | 2007.10.24 |
RECENT COMMENT