我正在开发一款专为1280x1024及更高屏幕分辨率设计的Flex应用程序。在极少数情况下使用投影仪(通常最大为1024x768像素)我想缩小应用程序(目前我得到了很多滚动条和剪辑)。
我已经尝试过应用程序的属性scaleX
和scaleY
以及stage.scaleMode
。但是,我无法找到一种方法
我该如何做到这一点?
答案 0 :(得分:1)
我会通过在顶级应用程序的“resize”事件中添加一个事件监听器来解决这个问题。这是resize事件的示例方法处理程序(假设处理程序在主Application类中,因此“this”指的是顶级Application):
function onResize(e:Event):void {
if(this.scaleX > 1){
//check if we need to readjust to a normal scale of 1
var effectiveWith:int = this.width*this.scaleX;
var effectiveHeight:int = this.height*this.scaleY;
if(effectiveWidth > 1280 || effectiveHeight > 1024){
this.scaleX = 1;
this.scaleY = 1;
}
}else{
//the scale is still 1, lets see if we should scale it up
if(this.width < 1280 || this.height < 1024){
this.scaleX = (1280-this.width)/1280 + 1;
this.scaleY = (1024-this.height)/1024 + 1;
}
}
}
答案 1 :(得分:1)
我终于找到了缩小应用程序的方法。实际上,孩子们需要扩展应用程序。否则,应用程序的width
和height
会缩小。
由于我正在使用状态,我还必须为currentStateChanging
事件添加事件处理程序。
private static const MIN_WIDTH:Number = 1250;
private static const MIN_HEIGHT:Number = 800;
protected function application_currentStateChangingHandler():void
{
callLater(scaleElements);
}
protected function application_resizeHandler():void
{
scaleElements();
}
protected function scaleElements():void
{
var newScaleX:Number = 1;
var newScaleY:Number = 1;
if (width < MIN_WIDTH)
newScaleX = width / MIN_WIDTH;
if (height < MIN_HEIGHT)
newScaleY = height / MIN_HEIGHT;
var newScale:Number = Math.min(newScaleX, newScaleY);
for (var i:int = 0; i < numElements; i++)
{
var element:DisplayObject = getElementAt(i) as DisplayObject;
if (element)
{
element.scaleX = newScale;
element.scaleY = newScale;
}
}
}
答案 2 :(得分:1)
为了整个应用程序,而不是所有元素分开,我删除了循环并添加了:
this.scaleX = newScale;
this.scaleY = newScale;
答案 3 :(得分:0)