- 浏览: 530800 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
flex 字体另外一种加载方式:利用国外牛人写的字体加载组件。。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="init(event)"> <mx:Script> <![CDATA[ import fontload.FontLoader; import mx.controls.Alert; import mx.events.FlexEvent; private var fontLoader:FontLoader=new FontLoader(); protected function init(event:FlexEvent):void { // TODO Auto-generated method stub fontLoader.addEventListener(Event.COMPLETE,loadFontCompleteHandler); fontLoader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); fontLoader.addEventListener(ProgressEvent.PROGRESS,progressHandler); } private function loadFont():void { fontLoader.load(new URLRequest(cbxFontFile.selectedItem.label)); pbar.visible=true; } private function loadFontCompleteHandler(e:Event):void{ var fonts:Array = fontLoader.fonts; cbxFonts.dataProvider=fonts; } private function errorHandler(e:IOErrorEvent):void{ Alert.show(e.text,"Error"); } private function progressHandler(e:ProgressEvent):void{ var percent:Number =Math.round(e.bytesLoaded/e.bytesTotal*100); pbar.setProgress(percent,100); pbar.label="loading "+percent+"%"+" file size:"+int(e.bytesTotal/1024)+"K"; } private function setFont():void { txtMsg.setStyle("fontFamily",cbxFonts.selectedItem.fontName); } ]]> </mx:Script> <mx:ApplicationControlBar width="100%" fillAlphas="[1.0,1.0]" fillColors="[#f5f5f5,#cccccc]"> <mx:FormItem label="file|Font file:" indicatorGap="0"> <mx:ComboBox id="cbxFontFile" prompt="-Select File-" selectedIndex="-1" change="loadFont()"> <mx:dataProvider> <mx:Object label="FontAssets.swf"/> <mx:Object label="FangSongFont.swf"/> <mx:Object label="MiniCartoonFont.swf"/> <mx:Object label="font.swf"/> </mx:dataProvider> </mx:ComboBox> </mx:FormItem> <mx:FormItem label="Font|Font Name:" indicatorGap="0"> <mx:ComboBox id="cbxFonts" prompt="-Select Font-" labelField="fontName" change="setFont()"/> </mx:FormItem> <mx:Spacer height="100%" width="100%"/> </mx:ApplicationControlBar> <mx:VBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> <mx:Text id="txtMsg" width="100%" text="ABCDEFG 中国人人民共合谷" fontSize="36" textAlign="center" fontWeight="normal"/> <mx:Spacer width="100%" height="30"/> <mx:ProgressBar id="pbar" mode="manual" minimum="0" maximum="100" trackHeight="10" visible="false"/> </mx:VBox> </mx:Application>
牛人写的字体加载组件:
/** * FontLoader 2.2 by Denis Kolyako. June 13, 2008. Last update: June 25, 2009. * Visit http://etcs.ru for documentation, updates and more free code. * * You may distribute this class freely, provided it is not modified in any way (including * removing this header or changing the package path). * * * Please contact etc[at]mail.ru prior to distributing modified versions of this class. */ /** * The FontLoader class lets you load any swf movie (ver. 6 or later), which contains embedded fonts to use these fonts in your application. */ package fontload { import flash.display.Loader; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.text.Font; import flash.utils.ByteArray; import flash.utils.Endian; import flash.events.ErrorEvent; [Event(name="complete", type="flash.events.Event")] [Event(name="open", type="flash.events.Event")] [Event(name="ioError", type="flash.events.IOErrorEvent")] [Event(name="verifyError", type="flash.events.IOErrorEvent")] [Event(name="httpStatus", type="flash.events.HTTPStatusEvent")] [Event(name="progress", type="flash.events.ProgressEvent")] [Event(name="securityError", type="flash.events.SecurityErrorEvent")] /** * FontLoader class * * @author etc * @version 2.2 * @playerversion Flash 9 * @langversion 3.0 */ public class FontLoader extends EventDispatcher { /** * @private */ private static const SWF_HEADER:ByteArray = new ByteArray(); /** * @private */ private static const CLASS_CODE:ByteArray = new ByteArray(); /** * @private */ private static const CLASS_NAME_PREFIX:String = 'Font$'; /** * @private */ private static const TAG_DO_ABC:uint = ((72 << 6) | 0x3F); /** * @private */ private static const TAG_SYMBOL_CLASS:uint = ((76 << 6) | 0x3f); /** * @private */ private static var _initialized:Boolean = false; /** * @private */ private static function init():void { if (FontLoader._initialized) return; var ba:SWFByteArray = new SWFByteArray(); ba.writeBytesFromString( '7800055F00000FA000000C01004411080000004302FFFFFFBF150B0000000100466F6E744C69620000' + 'BF1461020000010000000010002E00000000191272752E657463732E7574696C733A466F6E7400432F' + '55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C69622F' + '7372633B72752F657463732F7574696C733B466F6E742E61731772752E657463732E7574696C733A46' + '6F6E742F466F6E74175B4F626A65637420466F6E7420666F6E744E616D653D2208666F6E744E616D65' + '0D2220666F6E745374796C653D2209666F6E745374796C650C2220666F6E74547970653D2208666F6E' + '745479706502225D1B72752E657463732E7574696C733A466F6E742F746F537472696E670653747269' + '6E6708746F537472696E67175F5F676F5F746F5F646566696E6974696F6E5F68656C700466696C6543' + '2F55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C6962' + '2F7372632F72752F657463732F7574696C732F466F6E742E617303706F73033636380D72752E657463' + '732E7574696C7304466F6E740A666C6173682E74657874064F626A6563740335373006050116021614' + '161618010201030A07020607020807020A07020D07020E070315070415091501070217040000020000' + '00040000040C0000000200020F02101211130F02101211180106070905000101054100020100000001' + '030106440000010104000101040503D03047000001010105060EF103F018D030F019D04900F01A4700' + '00020201050620F103F01CD0302C05F01DD00401A02C07A0D00402A02C09A0D00403A02C0BA0480000' + '030201010421D030F103F0165D085D096609305D076607305D07660758001D1D6806F103F00B470000' ); // Magic bytes :-) ba.position = 0; ba.readBytes(FontLoader.SWF_HEADER); ba.length = 0; ba.writeBytesFromString( '392F55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C69' + '622F7372633B3B466F6E743030302E61730568656C6C6F2B48656C6C6F2C20776F726C642120497320' + '616E79626F647920686572653F2057686F27732074686572653F0F466F6E743030302F466F6E743030' + '300D72752E657463732E7574696C7304466F6E74064F626A6563740A666C6173682E74657874175F5F' + '676F5F746F5F646566696E6974696F6E5F68656C700466696C65382F55736572732F6574632F446573' + '6B746F702F50726F6A656374732F466F6E744C6F616465724C69622F7372632F466F6E743030302E61' + '7303706F73023534060501160216071801160A00050702010703080702090705080300000200000006' + '0000000200010B020C0E0D0F0101020904000100000001020101440100010003000101050603D03047' + '0000010102060719F103F006D030EF01040008F007D049002C05F00885D5F009470000020201010527' + 'D030F103F00465005D036603305D046604305D026602305D02660258001D1D1D6801F103F002470000' ); // Another magic bytes :-) ba.position = 0; ba.readBytes(FontLoader.CLASS_CODE); ba.length = 0; FontLoader._initialized = true; } /** * Creates a new FontLoader object. If you pass a valid URLRequest object to the FontLoader constructor, * the constructor automatically calls the load() function. * If you do not pass a valid URLRequest object to the FontLoader constructor, * you must call the load() function or the stream will not load. * * @param request (default = null) — The URL that points to an external SWF file. * @param autoRegister — Register loaded fonts automatically. */ public function FontLoader(request:URLRequest = null, autoRegister:Boolean = true) { super(); FontLoader.init(); this._loader.dataFormat = URLLoaderDataFormat.BINARY; this._loader.addEventListener(Event.COMPLETE, this.handler_complete); this._loader.addEventListener(Event.OPEN, super.dispatchEvent); this._loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, super.dispatchEvent); this._loader.addEventListener(IOErrorEvent.IO_ERROR, super.dispatchEvent); this._loader.addEventListener(ProgressEvent.PROGRESS, super.dispatchEvent); this._loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, super.dispatchEvent); if (request) this.load(request, autoRegister); } /** * @private */ private const _loader:URLLoader = new URLLoader(); /** * @private */ private var _bytes:ByteArray; /** * @private */ private var _libLoader:Loader; /** * @private */ private var _fontCount:uint; /** * @private */ private var _autoRegister:Boolean = true; /** * Sets automatic font registration. */ public function set autoRegister(value:Boolean):void { if (this._autoRegister == value) return; this._autoRegister = value; if (value) this.registerFonts(); } public function get autoRegister():Boolean { return this._autoRegister; } public function get bytesLoaded():uint { return this._loader.bytesLoaded; } public function get bytesTotal():uint { return this._loader.bytesTotal; } /** * @private */ private const _fonts:Array = new Array(); /** * Returns an array of font classes, which you can use to register any extracted font. */ public function get fonts():Array { return this._fonts.concat(); } /** * Initiates loading of an external SWF file from the specified URL. You can load another swf file, when previous operation completed (or stream closed by user). * * @param request:URLRequest — A URLRequest object specifying the URL to download. If the value of this parameter or the URLRequest.url property of the URLRequest object passed are null, Flash Player throws a null pointer error. * @param autoRegister — Register loaded fonts automatically. * * @event complete:Event — Dispatched after data has loaded and parsed successfully. * @event httpStatus:HTTPStatusEvent — If access is by HTTP, and the current Flash Player environment supports obtaining status codes, you may receive these events in addition to any complete or error event. * @event ioError:IOErrorEvent — The load operation could not be completed. * @event verifyError:IOErrorEvent — Dispatched when a parse operation fails (data has incorrect format). * @event open:Event — Dispatched when a load operation starts. * @event securityError:SecurityErrorEvent — A load operation attempted to retrieve data from a server outside the caller's security sandbox. This may be worked around using a policy file on the server. */ public function load(request:URLRequest, autoRegister:Boolean = true):void { this.close(); this._fonts.length = 0; this._fontCount = 0; this._autoRegister = autoRegister; this._loader.load(request); } /** * Loads from binary data stored in a ByteArray object. * * @param bytes:URLRequest — A ByteArray object. The specified ByteArray must contain valid SWF file. * @param autoRegister — Register loaded fonts automatically. * * @event complete:Event — Dispatched after data has loaded and parsed successfully. * @event httpStatus:HTTPStatusEvent — If access is by HTTP, and the current Flash Player environment supports obtaining status codes, you may receive these events in addition to any complete or error event. * @event ioError:IOErrorEvent — The load operation could not be completed. * @event verifyError:IOErrorEvent — Dispatched when a parse operation fails (data has incorrect format). * @event open:Event — Dispatched when a load operation starts. * @event securityError:SecurityErrorEvent — A load operation attempted to retrieve data from a server outside the caller's security sandbox. This may be worked around using a policy file on the server. */ public function loadBytes(bytes:ByteArray, autoRegister:Boolean = true):void { this.close(); this._fonts.length = 0; this._fontCount = 0; this._autoRegister = autoRegister; this.analyze(bytes, true); } /** * Closes the stream, causing any download of data to cease. */ public function close():void { try { this._loader.close(); } catch (error:Error) {} if (this._libLoader) { this._libLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, this.handler_libComplete); try { this._libLoader.close(); } catch (error:Error) {} try { this._libLoader.unload(); } catch (error:Error) {} this._libLoader = null; } } /** * Registers all loaded fonts. */ public function registerFonts():void { for each (var font:Font in this._fonts) { Font.registerFont((font as Object).constructor); } } /** * @private */ private function analyze(bytes:ByteArray, delayed:Boolean = false):void { var o:Object; var stringID:String; var id:uint; var fontID:uint; var tag:uint var length:uint; var pos:Number; var tempData:ByteArray; var fontSWF:ByteArray; var context:LoaderContext; var data:ByteArray; try { data = new SWFByteArray(bytes); } catch (error:Error) { if (delayed) { this._libLoader = new Loader(); this._libLoader.addEventListener(Event.ENTER_FRAME, this.handler_delayedVerifyError); } else { this.close(); super.dispatchEvent(new IOErrorEvent(IOErrorEvent.VERIFY_ERROR)); } return; } var fontData:Object = new Object(); var classCodeLength:uint = FontLoader.CLASS_CODE.length; while (data.bytesAvailable) { tag = data.readUnsignedShort(); id = tag >> 6; length = ((tag & 0x3F) == 0x3F) ? data.readUnsignedInt() : (tag & 0x3F); pos = data.position; switch (id) { case 13: case 48: case 62: case 73: case 75: case 88: fontID = data.readUnsignedShort(); tempData = fontData[fontID] as ByteArray; if (!tempData) { tempData = new ByteArray(); tempData.endian = Endian.LITTLE_ENDIAN; fontData[fontID] = tempData; } if ((tag & 0x3F) == 0x3F) { tempData.writeShort((id << 6) | 0x3F); tempData.writeUnsignedInt(length); } else { tempData.writeShort((id << 6) | (length & 0x3F)); } tempData.writeShort(fontID); tempData.writeBytes(data, data.position, length - 2); break; } data.position = pos + length; } tempData = new ByteArray(); tempData.endian = Endian.LITTLE_ENDIAN; tempData.writeBytes(FontLoader.SWF_HEADER); id = 0; for (o in fontData) { data = fontData[o] as ByteArray; if (data) { stringID = id.toString(); while (stringID.length < 3) stringID = '0' + stringID; stringID = FontLoader.CLASS_NAME_PREFIX + stringID; tempData.writeShort(FontLoader.TAG_DO_ABC); tempData.writeUnsignedInt(10 + stringID.length + classCodeLength); tempData.writeUnsignedInt(0x002E0010); tempData.writeUnsignedInt(0x10000000); tempData.writeByte(stringID.length); tempData.writeUTFBytes(stringID); tempData.writeByte(0); tempData.writeBytes(FontLoader.CLASS_CODE); tempData.writeBytes(data); tempData.writeShort(FontLoader.TAG_SYMBOL_CLASS); tempData.writeUnsignedInt(5 + stringID.length); tempData.writeShort(1); tempData.writeShort(o as uint); tempData.writeUTFBytes(stringID); tempData.writeByte(0); id++; } } this._fontCount = id; if (this._fontCount) { tempData.writeUnsignedInt(0x00000040); fontSWF = new ByteArray(); fontSWF.endian = Endian.LITTLE_ENDIAN; fontSWF.writeUTFBytes('FWS'); fontSWF.writeByte(9); fontSWF.writeUnsignedInt(tempData.length + 8); fontSWF.writeBytes(tempData); this._libLoader = new Loader(); this._libLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handler_libComplete); context = new LoaderContext(); if ('allowLoadBytesCodeExecution' in context) { // AIR compatibility context['allowLoadBytesCodeExecution'] = true; } this._libLoader.loadBytes(fontSWF, context); } else { if (delayed) { this._libLoader = new Loader(); this._libLoader.addEventListener(Event.ENTER_FRAME, this.handler_delayedComplete); } else { this.close(); super.dispatchEvent(new Event(Event.COMPLETE)); } } } /** * @private */ private function handler_delayedComplete(event:Event):void { this._libLoader.removeEventListener(Event.ENTER_FRAME, this.handler_delayedComplete); this._libLoader = null; this.close(); super.dispatchEvent(new Event(Event.COMPLETE)); } /** * @private */ private function handler_delayedVerifyError(event:Event):void { this._libLoader.removeEventListener(Event.ENTER_FRAME, this.handler_delayedVerifyError); this._libLoader = null; this.close(); super.dispatchEvent(new IOErrorEvent(IOErrorEvent.VERIFY_ERROR)); } /** * @private */ private function handler_complete(event:Event):void { this.analyze(this._loader.data as ByteArray); } /** * @private */ private function handler_libComplete(event:Event):void { var id:String; var i:uint; var fontClass:Class; var font:Font; var domain:ApplicationDomain = this._libLoader.contentLoaderInfo.applicationDomain; for (i = 0;i < this._fontCount;i++) { id = i.toString(); while (id.length < 3) id = '0' + id; id = FontLoader.CLASS_NAME_PREFIX + id; if (domain.hasDefinition(id)) { fontClass = domain.getDefinition(id) as Class; font = new fontClass() as Font; if (font && font.fontName) { // Skip static fonts this._fonts.push(font); if (this._autoRegister) Font.registerFont(fontClass); } } } this.close(); super.dispatchEvent(new Event(Event.COMPLETE)); } } } import flash.utils.ByteArray; import flash.utils.Endian; import flash.geom.Rectangle; internal class SWFByteArray extends ByteArray { /** * @private */ private static const TAG_SWF:String = 'FWS'; /** * @private */ private static const TAG_SWF_COMPRESSED:String = 'CWS'; public function SWFByteArray(data:ByteArray=null):void { super(); super.endian = Endian.LITTLE_ENDIAN; var endian:String; var tag:String; var position:uint; if (data) { endian = data.endian; position = data.position; data.endian = Endian.LITTLE_ENDIAN; data.position = 0; if (data.bytesAvailable > 26) { tag = data.readUTFBytes(3); if (tag == SWFByteArray.TAG_SWF || tag == SWFByteArray.TAG_SWF_COMPRESSED) { this._version = data.readUnsignedByte(); data.readUnsignedInt(); data.readBytes(this); if (tag == SWFByteArray.TAG_SWF_COMPRESSED) super.uncompress(); } else throw new ArgumentError('Error #2124: Loaded file is an unknown type.'); this.readHeader(); } else { throw new ArgumentError('Insufficient data.'); } data.endian = endian; data.position = position; } } /** * @private */ private var _bitIndex:uint; /** * @private */ private var _version:uint; public function get version():uint { return this._version; } /** * @private */ private var _frameRate:Number; public function get frameRate():Number { return this._frameRate; } /** * @private */ private var _rect:Rectangle; public function get rect():Rectangle { return this._rect; } public function writeBytesFromString(bytesHexString:String):void { var length:uint = bytesHexString.length; for (var i:uint = 0;i<length;i += 2) { var hexByte:String = bytesHexString.substr(i, 2); var byte:uint = parseInt(hexByte, 16); writeByte(byte); } } public function readRect():Rectangle { var pos:uint = super.position; var byte:uint = this[pos]; var bits:uint = byte >> 3; var xMin:Number = this.readBits(bits, 5) / 20; var xMax:Number = this.readBits(bits) / 20; var yMin:Number = this.readBits(bits) / 20; var yMax:Number = this.readBits(bits) / 20; super.position = pos + Math.ceil(((bits * 4) - 3) / 8) + 1; return new Rectangle(xMin, yMin, xMax - xMin, yMax - yMin); } public function readBits(length:uint, start:int = -1):Number { if (start < 0) start = this._bitIndex; this._bitIndex = start; var byte:uint = this[super.position]; var out:Number = 0; var shift:Number = 0; var currentByteBitsLeft:uint = 8 - start; var bitsLeft:Number = length - currentByteBitsLeft; if (bitsLeft > 0) { super.position++; out = this.readBits(bitsLeft, 0) | ((byte & ((1 << currentByteBitsLeft) - 1)) << (bitsLeft)); } else { out = (byte >> (8 - length - start)) & ((1 << length) - 1); this._bitIndex = (start + length) % 8; if (start + length > 7) super.position++; } return out; } public function traceArray(array:ByteArray):String { // for debug var out:String = ''; var pos:uint = array.position; var i:uint = 0; array.position = 0; while (array.bytesAvailable) { var str:String = array.readUnsignedByte().toString(16).toUpperCase(); str = str.length < 2 ? '0'+str : str; out += str+' '; } array.position = pos; return out; } /** * @private */ private function readFrameRate():void { if (this._version < 8) { this._frameRate = super.readUnsignedShort(); } else { var fixed:Number = super.readUnsignedByte() / 0xFF; this._frameRate = super.readUnsignedByte() + fixed; } } /** * @private */ private function readHeader():void { this._rect = this.readRect(); this.readFrameRate(); super.readShort(); // num of frames } }
加载的swf文件,可以通过博客前面提到的两种方式生成:1。通过actionScript生成,2。通过css转换为swf
该组件均支持这两类的swf字体。。。
发表评论
-
对于swiz1.0框架的一点理解
2011-05-18 11:32 1160Swiz的核心是个简单的控制反转框架。借助于IoC框架,应用组 ... -
flex 强制viewStack更新
2011-05-12 15:24 2157viewStack 第一次创建后,后面viewStack切换 ... -
flex 任意组件添加鼠标手型
2011-05-09 16:03 2086<s:TextArea textFlow="{ ... -
flex 时区转换
2011-05-06 15:29 1258public static function getTimeZ ... -
关于在s:Application 使用mx:DataGrid
2011-05-05 16:24 981在flex4中使用mx:DataGrid ,不支持内联的Da ... -
原来<s:ComboBox>已经出来了
2011-04-27 14:40 1219最近做的项目需要可编辑的下拉列表,以前google发现只有d ... -
s:DataGrid与mx:DataGrid
2011-04-22 15:59 3085<s:DataGrid id="showGr ... -
AIR 居中
2011-04-21 13:54 1135youWin.nativeWindow.x = (Capabi ... -
swiz 元标签[EventHandler]
2011-04-19 14:40 1123[EventHandler( event="User ... -
flex4 AIR titleBar问题
2011-04-13 16:14 1596flex3 AIR中 windedApplication有sh ... -
flex 国际化参数
2011-04-11 11:41 1164-locale zh_CN -locale en_US - ... -
swiz 弹出框的处理
2011-04-06 12:54 1083由于swiz框架的事件是基于冒泡的,而且它 it was ... -
flex 4 工具栏
2011-04-02 15:16 2505flex 4 WEB模式下的工具栏,能正常运行。 <? ... -
flex 的反射要事先声明.......为什么?
2011-03-03 12:29 1000Flex的反射有点假,你必须先声明一下才能反射的到。为什么?? ... -
as 数组去重复元素
2011-02-16 09:38 1208var a:Array=new Array("a&q ... -
(flex4): addChild() is not available in this class.
2011-02-15 14:01 1866flex4中: just create another co ... -
BulkLoader 多文件加载库(转)
2011-02-14 12:21 2724在BulkLoader 的 add方法中 ... -
关于blazeds的Channel/endpoint的介绍
2011-02-11 10:29 1601AMFChannel/AMFEndpoint: 简单的通道传输 ... -
blazeds 自带的日志记录功能
2011-02-09 16:40 2870在mxml添加<mx:TraceTarget leve ... -
查看MXML文件所翻译的ActionScript代码
2011-01-21 15:40 1061项目属性——》Flex编译器 -locale zh_CN ...
相关推荐
FLEX字体助手可以与之无缝集成,通过ActionScript代码控制字体的动态加载和解码,提供更加灵活的解决方案。 6. **性能优化**:嵌入大量字体可能导致页面加载速度变慢。FLEX字体助手允许开发者根据需求选择性地嵌入...
通过这种方法,可以将所需的字体文件编译进SWF文件中,或者在运行时动态加载到SWF文件中。这样一来,无论用户计算机上是否安装了该字体,应用程序都能正确显示文本。此外,嵌入字体还具有一些其他优点: - **抗锯齿*...
5. **应用字体**: 在文本组件上使用新定义的字体。例如: ```xml 你好,世界!" fontFamily="ChineseFont"/> ``` 6. **注意事项**:在使用自定义字体时,注意版权问题,确保你有权使用这些字体。另外,过多的...
5. 设置:提供一些设置选项,如字体大小、夜间模式等。 五、性能优化 1. 自适应布局:确保`ScalableStageWebView`能根据设备的屏幕尺寸和方向自动调整大小。 2. 页面加载优化:对大量图片或复杂JavaScript的网页,...
通过这个工具,开发者可以直观地查看和修改组件的外观,包括颜色、字体、边框等样式属性,从而更好地定制用户界面。它允许开发者预览不同的样式设置,以便在实际项目中选择最佳方案。 2. **Charts Explorer.swf**:...
在这个CSS选择器中,我们把`MyCustomFont`放在字体家族的首位,如果浏览器支持并且字体文件加载成功,那么Flex项目将使用这个自定义字体。如果失败,浏览器会依次尝试后面的字体。 `demo.css`可能包含类似上述的...
4. 加载数据:创建GraphicsLayer并加载数据,根据需要创建不同类型的图层(如等级地图、柱状图)。 5. 添加标注:利用TextSymbol创建标注,并将其添加到GraphicsLayer。 6. 实现交互:编写事件监听器,响应用户的...
3. **资源**:包括图片、字体、样式表等,这些资源可以被多个组件或类共享。 4. **元数据**:关于组件或类的元信息,例如元数据可以指定组件的外观和行为。 描述中提到的“flex3引用的swc包”,表明这是一个适用于...
2. **使用系统字体替代内嵌字体**:内嵌字体会增加编译时间和项目大小,使用系统默认字体可显著减少这些影响。 3. **定期清理工程**:通过右键点击项目并选择"Clean",可以清除编译缓存,解决可能导致编译问题的...
7. 模块化开发:Flex 4.0引入了模块(Module)的概念,允许将大型应用拆分为多个独立加载的模块,从而优化加载时间和内存使用。 8. 集成开发环境(IDE):Flex Builder或Flash Builder(Flex的开发工具)在Flex 4.0...
SystemManager不仅负责控制Flex应用的基本元素,如应用窗口、Application实例、弹出窗口和光标,还负责管理ApplicationDomain中的类加载和执行。下面将详细讨论SystemManager的主要功能和工作流程。 1. **应用窗口...
在Flex中,我们可以通过加载这个XML文件,解析其内容,并将每张图片的URL绑定到一个Image组件上。同时,我们可以创建一个定时器或计时器事件,每隔一定时间自动切换图片。用户还可以通过点击左右箭头或者滑动来手动...
5. `libs`:这个目录存放项目的库文件,可能包含Flex框架库和其他第三方库。 6. `src`:源代码目录,包含ActionScript和MXML文件,这是构建Flex应用程序的主要部分。 六、自定义和应用皮肤 要应用或修改经典的皮肤...
3. CSS样式表:用于定义应用的视觉风格,包括地图组件的外观以及整个界面的颜色、字体等。 4. 图标和资源文件:可能包含了地图上的图标、标注图片以及其他视觉元素。 5. XML配置文件:可能包含了地图服务的配置信息...
- **延迟加载**: 对于深层次的树,可以使用延迟加载策略,只在需要时加载子节点。 6. **Flex Tree的其他功能** - **拖放操作**: Tree支持拖放功能,允许用户重新排列节点或从其他来源导入数据。 - **多选模式**:...
SWF文件是Flash Player理解和执行的二进制格式,包含了动画、音频、视频、字体和其他互动元素。它不包含原始的ActionScript代码,而是包含了经过优化和编译的指令。 3. **反编译工具**: 如描述中提到的"JPEXS Free...
这些皮肤可能包括颜色、字体、边框、按钮样式、滑块样式等各种元素的差异,为Flex应用程序提供多样化的外观。 描述中提到的"三款漂亮的Flex的皮肤主题"意味着我们可以期待三个美观的设计,它们可能各有特色,适合...
开发者可以使用这些类在Flex应用中动态加载和控制iframe的内容。 2. **示例或演示**:为了帮助用户理解和使用这个库,可能包含了一些示例Flex项目,这些项目展示了如何在实际应用中嵌入和操作iframe。 3. **文档**...
此外,由于引用了特定的字体,最终的编译文件尺寸较大,这可能会对加载速度和用户体验产生影响。不过,如果去除这些字体引用,文件大小可以显著减小,对性能的提升有积极意义。 在"TimerAxis"这个压缩包文件中,很...
它不仅控制 swf 的加载和启动,还划分 Flex 工程显示层级,保存嵌入字体和样式,监视 swf 画布大小等顶级功能。 SystemManager 是顶级显示层的管理器,凡是父级为 SystemManager 的显示层都是顶级显示层。应用程序...