RMM系统需要自适应分辩率,但它不是简单的大小,它要做到连里面的字,图同比地扩大。 我们给出的方案是,初始化时,根据分辩调用不同的目录下的图片(图片大小已定)及CSS。
正常情况下的[url=javascript:;] 在这里,我首先给出[url=javascript:;] 一、写不同的CSS文件,然后在[url=javascript:;] 二、写一个LOADSTYLE函数: /** * 调用CSS **/ private function loadStyles( name:String ) : void { var styleI:IEventDispatcher = StyleManager.loadStyleDeclarations( name ); } 这个函数可以动态调用相应的CSS文件的SWF,调用的示例如下: if(RmmWidth>1390) { loadStyles("assets/cssToswf/interface1440.swf"); } else if(RmmWidth>1300) { loadStyles("assets/cssToswf/interface1360.swf"); } 我通过把BUTTON的风格写在CSS就可以决定不同的分辩率用不同的图片了,而且动态效果也出来了,代码如下: /* CSS file */ .soundbtDown { width : 30; height : 30; upSkin : Embed(source='assets/1440/button/soundDown_up.png'); overSkin : Embed(source='assets/1440/button/soundDown_up.png'); downSkin : Embed(source='assets/1440/button/soundDown_down.png'); } 可是运行时,效果却并非想像的那样,那个width,height根据不起作用。 大小不能自适应,相反把图给压缩了。我试过想在代码里面重新得到图片,然后根据图片的大小设置BUTTON的大小,可是发现根据不能再得到原来这张资源图片。 笨笨的我,使用了getStyle: 1、var obj:Object= this.getStyle("upSkin "); 2、var obj:Image = this.getStyle("upSkin ") as Image; 发现都不能得到原图。正当我要放弃的时候,打算通过别一个配置来配置相应的长跟宽,突然发现自己真笨,不是可以直接配置在CSS吗? 通过this.getStyle("width"),不就可以得到width了吗?而且这个WIDTH是可以自己配置的,同时,我发现,这个名字还可以自己取,自己想配置什么就是什么。应用例子如下: 给文件加一个updateComplete事件,如下: <mx:Button xmlns:mx=" http://www.adobe.com/2006/mxml updateComplete="OnUpdateComplete()"> /** * 可以直接通过CSS配置参数 * 当图片更新的时候,改变大小 **/ private function OnUpdateComplete():void { var w:int = this.getStyle("width"); var h:int = this.getStyle("height"); if (w != this.width) { this.width = w; } if (h != this.height) { this.height = h; } } 这样就可以根据CSS设置尺寸了,在其他地方我也使用了这个方法,发现真好用。 用法如下: 一、随便拿一个[url=javascript:;] <mx:Box id="styleBox" width="100%" height="100%" styleName="leftAdView" verticalAlign="middle" horizontalAlign="center"> CSS文件写法: .leftAdView { adwidth : 405; adheight : 665; } 定义两个变量: [Bindable] private var adw:int; [Bindable] private var adh:int; 然后在初始化函数里面添加: adw = styleBox.getStyle("adwidth"); adh = styleBox.getStyle("adheight"); 这两个变量,就可以任意绑定界面中的控制了。 同理,我们还可以配置String 类型的,如: .message { okmessage: "ok,i am here"; errormessage:"error,where are you?" |