Flash CS5 用户自定义Button的属性
发布时间:2020-12-15 18:25:42 所属栏目:百科 来源:网络整理
导读:其实主要就是下面这关键字的使用了 ? ?有这个生成的SWC组件在程序中调用的时候就可以在属性中显示出来了 1.关于[Inspectable(defaultValue = "Design/Skin/Btn_Common.swf")]的使用前提是在property define 对话框中Class的设置正确,包括命名空间,这样,后
其实主要就是下面这关键字的使用了 ? ?有这个生成的SWC组件在程序中调用的时候就可以在属性中显示出来了 1.关于[Inspectable(defaultValue = "Design/Skin/Btn_Common.swf")]的使用前提是在property define 对话框中Class的设置正确,包括命名空间,这样,后台的Source的只要是定义了Inspectable的标签都会自动设置上去。 原谅地址 ??http://gzg844cz.iteye.com/blog/1578926 这个不是采用swz制作方法,而是完全使用代码控制,以制作皮肤为例。最后再在button上面增加一个Label文言显示。? 分为两大步:? 一画面制作? 1.组件画面配置? 2.Skin制作? 二code? 1.Button组件的类? 2.SKin选择的类? 另外写一个Bat文件方便copy组件到Adobe的组件目录下:? 文件名:D:JavaDevSpaceWorkSpaceFlashToFlashCreateCompo net.bat? 内容:? @echo off? :: ************ SET FILENAME *********************? SET CURPATH="D:JavaDevSpaceWorkSpaceFlashToFlash? SET fileName=HmiComponent.fla"? SET TARPATH="C:Documents and SettingsxuyedingLocal SettingsApplication DataAdobeFlash CS5en_USConfigurationComponents"? COPY /Y %CURPATH%%fileName% %TARPATH%? 可以看到所以工作目录都是在D:JavaDevSpaceWorkSpaceFlashToFlash目录下。? 下面开始制作了。? 一:画面制作? 1.在工作目录下,新建一个HmiComponent.fla文件,上面可以看到。stage属性默认就可以,下面不会用到这些的。? 2.Ctrl + F8新建一个Symbol,Name:UserLabelButton? ,Type:MovieClip。Class:lane.hmi.components.btn.UserLabelButton? 这个是下面主要的Code。? 3.对刚才的UserLabelButton的MC进行编辑:右击->Component difine设置如下:? skinFileName是这次制作的讲解例子,所以大家可以只追加skinFileName一栏。? 至此,组件制作完成了,close CS5 执行Bat文件把这个目录下的HmiComponent.fla copy到C:Documents and SettingsxuyedingLocal SettingsApplication DataAdobeFlash CS5en_USConfigurationComponents下。? 下面制作skin:? 工作目录:D:JavaDevSpaceWorkSpaceFlashToFlash下skin目录为:DesignSkin下新建Btn_Common.fla? 1.打开Btn_Common.fla? 制作四个MC:如图? 分别再制作另外三个MC,最终如下图:? 四个Class分别为:Sel,Nml,Dis,Act? 保存,生成swf文件。? 至此所以得画面制作就都完成了,很简单吧。下面开始code? /*------------------------------------------------ --------------*/? 二:code部分? 目录如下:? 选择部分为我这次用到的src。? /* ------------------------------------------ */? SWFClassLibraryEvent.as? /************************************************* *****************************? * @file??????? SWFClassLibraryEvent.as? * @brief??????? SWFClassLibraryEvent? * @note??????? Copyright (C) 2009 ThinkinGall PERSONAL. All rights reserved.? * @author??????? SHSC Xuyeding? * @date??????? 2009/12/20? * @version??????? 1.00? ************************************************** *****************************/? package lane.hmi.manager {? import flash.events.Event;? public class SWFClassLibraryEvent extends Event {? /** class is finish loaded */? public static const CLASS_LOADED:String = "classLoaded";? /** clas load error */? public static const LOAD_ERROR:String = "loadError";? /**? * Construcotr? * @param??? type? */? public function SWFClassLibraryEvent(type:String){? super(type);? }? * clone? * @param??? none? * @return??? none? public override function clone():Event {? return new SWFClassLibraryEvent(type);? * to string? public override function toString():String {? return formatToString("SWFClassLibraryEvent","type","bubbles","cancelable","eventPhase");? SWFClassLibrary.as? * @file??????? SWFClassLibrary.as? * @brief??????? SWFClassLibrary? import flash.display.DisplayObject;? import flash.display.DisplayObjectContainer;? import flash.display.Loader;? import flash.display.MovieClip;? import flash.events.EventDispatcher;? import flash.events.IOErrorEvent;? import flash.events.SecurityErrorEvent;? import flash.net.URLRequest;? import flash.system.System;? import lane.hmi.utils.DebugLog;? *??? SWFClassLibrary? *??? @class??? SWFClassLibrary? public class SWFClassLibrary extends EventDispatcher {? /** self instance container*/? private static var mySelf:Object = new Object();? /** swf file name */? private var _swfFileName:String = null;? /** loader instance */? private var loader:Loader = null;? /** count */? private var usedCounter:int = 1;? /** class initialize status */? public var initStatus:int = INIT_STATE_NONE;? public static const INIT_STATE_NONE:int = 0;? public static const INIT_STATE_PROCESSING = 1;? public static const INIT_STATE_FINISH:int = 2;? public static const INIT_STATE_ERROR:int = -1;? * Constructor? * @param??? swfFileName:index id? public function SWFClassLibrary(swfFileName:String) {? _swfFileName = swfFileName;? mySelf[swfFileName] = this;? * get instance from object container? * @return??? SWFClassLibrary instance? public static function getInstance(swfFileName:String):SWFClassLibrary {? /* if exists get instance*/? if (mySelf.hasOwnProperty(swfFileName)) {? SWFClassLibrary(mySelf[swfFileName]).usedCounter++ ;? return mySelf[swfFileName];? /* not exist new instance */? else {? return new SWFClassLibrary(swfFileName);? * initialize? public function initialize():void {? /* not none */? if (initStatus != INIT_STATE_NONE) {? return;? /* set processing status */? initStatus = INIT_STATE_PROCESSING;? /* load file path */? var urlReq:URLRequest = new URLRequest(_swfFileName);? loader = new Loader();? /* add listener */? loader.contentLoaderInfo.addEventListener(Event.IN IT,initHandler,false,true);? loader.contentLoaderInfo.addEventListener(IOErrorE vent.IO_ERROR,ioErrorHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> loader.contentLoaderInfo.addEventListener(Security ErrorEvent.SECURITY_ERROR,securityErrorHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> //var loaderContext:LoaderContext = new LoaderContext();? loader.load(urlReq);? //DebugLog.printTrace(loader.contentLoaderInfo.loa derURL);? /*--------------event handler------------------*/? * initialize finish handler? * @param??? event? private function initHandler(event:Event):void {? initStatus = INIT_STATE_FINISH;? if (loader.content is DisplayObjectContainer) {? /* time line class */? var mainTimeLine:DisplayObjectContainer = DisplayObjectContainer(loader.content);? /* stop all mc */? for (var i:int = 0; i skin class lib */? private var btnSkinLibrary:SWFClassLibrary = null;? /** button skin class name selector */? private var btnSkinSelector:ButtonSkinSelector = null;? /** button skin MC */? private var buttonSkin:MovieClip = null;? public function UserLabelButton(){? /* mouse down event */? addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> /* mouse up event */? addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> /* mouse roll out event */? addEventListener(MouseEvent.ROLL_OUT,mouseRollOutHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> /* mouse wheel event */? addEventListener(MouseEvent.ROLL_OVER,mouseRollOverHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> * mouse down handler? protected function mouseDownHandler(event:MouseEvent):void {? /* selected set */? buttonSelectedStatus = true;? * mouse up handler? protected function mouseUpHandler(event:MouseEvent):void {? /* reactive set */? if (buttonSelectedStatus){? /* reactive reset */? buttonSelectedStatus = false;? /* mouse click */? mouseClickHandler();? * mouse roll out handler? protected function mouseRollOutHandler(event:MouseEvent):void {? if (buttonReactStatus == true){? buttonReactStatus = false;? if (buttonSelectedStatus == true){? * mouse roll over handler? protected function mouseRollOverHandler(event:MouseEvent):void {? buttonReactStatus = true;? * mouse click handler? protected function mouseClickHandler():void {? /*-------------sub method or method--------------*/? * component size update handler? override protected function updateComponentSize():void {? // TODO? * update button component status? protected function updateButtonStatus():void {? /* skin class is not ready */? if ((btnSkinLibrary == null) || (btnSkinLibrary.initStatus != SWFClassLibrary.INIT_STATE_FINISH)){? btnSkinSelector = new ButtonSkinSelector(btnSkinLibrary);? /* get the skin class name */? var skinIndex = btnSkinSelector.skinIndexOf(buttonReactStatus,buttonSelectedStatus,buttonDisableStatus);? var strSkinClassName = btnSkinSelector.getSkinClassName(skinIndex);? /* set the skin class */? if (buttonSkin != null){? removeChild(buttonSkin);? buttonSkin = null;? var classReference:Class;? classReference = btnSkinLibrary.getClass(strSkinClassName);? if (classReference != null){? /* set skin property */? buttonSkin = new classReference() as MovieClip;? buttonSkin.width = actualWidth;? buttonSkin.height = actualHeight;? /* add skin to button */? addChild(buttonSkin);? setChildIndex(buttonSkin,0);? /* TODO */? * skin class load finish? private function skinLoadFinishHandler(event:SWFClassLibraryEvent): void {? /* remove listener */? btnSkinLibrary.removeEventListener(SWFClassLibrary Event.CLASS_LOADED,skinLoadFinishHandler);? btnSkinLibrary.removeEventListener(SWFClassLibrary Event.LOAD_ERROR,skinLoadErrorHandler);? /* update button status */? updateButtonStatus();? * skin class load error? private function skinLoadErrorHandler(event:SWFClassLibraryEvent):v oid {? DebugLog.printFatal(event.toString());? /*----------------setter getter------------------*/? /** button skin path */? private var _skinFileName:String = null;? [Inspectable(category="General",type="String")]? public function get skinFileName():String {? return _skinFileName;? public function set skinFileName(value:String):void {? if ((value == null) || (value == "")){? _skinFileName = null;? btnSkinSelector = null;? _skinFileName = pathTokenConvert(value);? /* skin clear */? if (btnSkinLibrary != null){? btnSkinLibrary = null;? /* skin class loader */? btnSkinLibrary = SWFClassLibrary.getInstance(_skinFileName); // "Design/Skin/Btn_Common.swf");? btnSkinLibrary.addEventListener(SWFClassLibraryEve nt.CLASS_LOADED,skinLoadFinishHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> btnSkinLibrary.addEventListener(SWFClassLibraryEve nt.LOAD_ERROR,skinLoadErrorHandler,sans-serif; font-size:14px; line-height:25px; text-align:left"> btnSkinLibrary.initialize();? /* load finish */? if (btnSkinLibrary.initStatus == SWFClassLibrary.INIT_STATE_FINISH){? }? /* load error,add listener */else {? /** button reactive status */? private var _buttonReactStatus:Boolean = false;? [Inspectable]? public function get buttonReactStatus():Boolean {? return _buttonReactStatus;? public function set buttonReactStatus(value:Boolean):void {? _buttonReactStatus = value;? /** button selected status */? private var _buttonSelectedStatus:Boolean = false;? [Inspectable]? public function get buttonSelectedStatus():Boolean {? return _buttonSelectedStatus;? public function set buttonSelectedStatus(value:Boolean):void {? _buttonSelectedStatus = value;? /** button disable status */? private var _buttonDisableStatus:Boolean = false;? public function get buttonDisableStatus():Boolean {? return _buttonDisableStatus;? public function set buttonDisableStatus(value:Boolean):void {? _buttonDisableStatus = value;? /** get button label */? public function get label():String {? return labelTextField.text;? /** set button label */? public function set label(value:String):void {? labelTextField.text = value;? * @file??????? ButtonSkinSelector.as? * @brief??????? ButtonSkinSelector? * @date??????? 2009/12/13? import lane.hmi.manager.SWFClassLibrary;? *??? ButtonSkinSelector? *??? @class??? ButtonSkinSelector? internal class ButtonSkinSelector {? /** button status:normal */? public static const BUTTON_NORMAL:String = "Nml";? /** button status:reactive */? public static const BUTTON_REACT:String = "Act";? /** button status:selected */? public static const BUTTON_SELECTED:String = "Sel";? /** button status:disable */? public static const BUTTON_DISABLED:String = "Dis";? [ArrayElementType("String")]? private static var arrSkinStatus:Array = [BUTTON_NORMAL,BUTTON_DISABLED,BUTTON_SELECTED,BUTTON_SELECTED + BUTTON_DISABLED,BUTTON_REACT,BUTTON_REACT + BUTTON_DISABLED,BUTTON_REACT + BUTTON_SELECTED,BUTTON_REACT + BUTTON_SELECTED + BUTTON_DISABLED,];? * @param??? swfClassLib? public function ButtonSkinSelector(swfClassLib:SWFClassLibrary){? createSkinStatus(swfClassLib);? * index of button skin : normal,reactive,selected,disable...? * @param??? act? * @param??? sel? * @param??? dis? * @return??? (100)2:active,(110)2:active + selected,(001)2:disable? public function skinIndexOf(act:Boolean,sel:Boolean,dis:Boolean):int {? return (act == true ? 1 : 0) skin list? private function createSkinStatus(swfClassLib:SWFClassLibrary):void {? var index:int = 0;? /* normal 000 => 1 normal */? index = skinIndexOf(false,false);? if (swfClassLib.hasClass(arrSkinStatus[index]) == false){? arrSkinStatus[index] = BUTTON_NORMAL;? /* disable 001 => 1 disable */? arrSkinStatus[index] = BUTTON_DISABLED;? /* selected 010 => 2 selected */? arrSkinStatus[index] = BUTTON_SELECTED;? /* selected,disable 011 => 3 disable */? /* active 100 => 4 active */? index = skinIndexOf(true,sans-serif; font-size:14px; line-height:25px; text-align:left"> arrSkinStatus[index] = BUTTON_REACT;? /* active,disable 101 => 5 disable */? * get skin class name from defined array? * @param??? index? * @return??? skin class name? public function getSkinClassName(index:int):String {? return arrSkinStatus[index];? 至此code部分也完成了。? 下面可以测试了。? 注意:? 1.关于[Inspectable(defaultValue = "Design/Skin/Btn_Common.swf")]的使用前提是在property define 对话框中Class的设置正确,包括命名空间,这样,后台的Source的只要是定义了Inspectable的标签都会自动设置上去。 2.Inspectable不可以放置在属性定义头,而是放在Settergetter地方,这样才能自动找到变量名统一。? 还是有个问题:如果所得属性都设置了,组件拉到Stage上,不改变属性的值,这样所有属性就不会再次执行了。导致属性值就获取不到了。奇怪。每次都手工设置属性随便改变一下属性panel的值就可以了。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |