0

如果容器被缩放,事件本身和它的子元素都不会改变宽度值,那么它们如何改变它们的宽度呢?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            private function scaleOutContainer():void {
                outerContainer.scaleX = slider.value;
                trace("outerContainer.width: " + outerContainer.width);
                trace("outerContainer.scaleX: " + outerContainer.scaleX);
                trace("image width: " + fotoImig.width);
                trace("image scaleX: " + fotoImig.scaleX);
                var containerBound:Rectangle = outerContainer.getBounds(this);
                trace(containerBound);
                trace("=====================");
            }
        ]]>
    </fx:Script>
        <s:Group id="outerContainer" left="50" top="80" width="500">
            <s:layout>
                <s:VerticalLayout/>
            </s:layout>
            <s:BitmapImage id="fotoImig" source="@Embed('assets/foto.jpg')"/>
            <s:Label id="info" text="Test Scale"/>
        </s:Group>
        <s:HGroup left="50" top="50">
            <s:Label text="scale outContainer"/><s:HSlider id="slider" snapInterval="0.1" value="1" change="scaleOutContainer()"/>
        </s:HGroup>
</s:Application>
4

2 回答 2

0

每个 DisplayObject 仅具有变换矩阵(在 object.transform.matrix 中可用)。诸如 x、y、scaleX、scaleY、rotation、width、height 之类的值只是 setter / getter 函数,适用于矩阵。

例如 scaleX getterMath.sqrt(m[0]*m[0] + m[1]*m[1] + m[2]*m[2]);对应于具有由变换矩阵的第一行定义的大小的框的对角线。

宽度吸气剂是o.getBounds(o.parent).width

高度吸气剂是o.getBounds(o.parent).height

但我仍然不明白,宽度和高度设置器是如何工作的。例如

var rect = new Sprite();
rect.graphics.drawRect(0,0,100,100);
rect.rotation = 20;
trace(rect.width);  // 128.15
rect.width = 80;
trace(rect.width);  // 92.85
rect.width = 80;
trace(rect.width);  // 89.4
于 2014-07-04T22:23:52.393 回答
0

scaleX并且scaleY不以任何方式影响对象的实际大小。比例属性只是修改它们在屏幕上的显示方式。对于应用程序来说,那个 50x50 的盒子仍然是 50x50,即使它在屏幕上看起来是 200x200 的scaleX = scaleY = 4.

以这种方式进行缩放,这样原始大小就不会丢失。通过这种方式,您可以自由地重复缩放对象,并且始终相对于原始大小。

我不确定比例属性实际上是如何工作的。如果您实际上挖掘了 a 的某些属性,DisplayObject则有多个宽度值(width、measuredWidth、explicitWidth 和 percentWidth in UIComponent)。我的猜测(不幸的是,纯粹是猜测)是其中一个值发生了变化,而宽度/高度值保持不变。

如果您需要缩放对象的宽度/高度值,您可以将宽度/高度值乘以它们各自的缩放属性。

于 2012-11-08T16:15:42.330 回答