事件如果容器被缩放,它本身及其子节点都不会改变宽度值,那么它们如何改变它们的宽度呢?
<?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>
答案 0 :(得分:0)
scaleX
和scaleY
不会以任何方式影响对象的实际大小。缩放属性只是修改它们在屏幕上的显示方式。对于该应用程序,该50x50的盒子仍然是50x50,即使它在scaleX = scaleY = 4
的屏幕上看起来是200x200。
缩放是以这种方式完成的,因此原始大小永远不会丢失。这样,您可以反复自由缩放对象,并始终相对于原始大小。
我不确定比例属性实际上是如何工作的。如果您实际挖掘DisplayObject
的某些属性,则有多个宽度值(width,measuredWidth,explicitWidth,加上UIComponent
中的percentWidth)。我的猜测(遗憾的是纯粹的猜测)是这些值中的一个被改变而宽度/高度值保持不变。
如果需要缩放对象的宽度/高度值,可以将宽度/高度值乘以各自的缩放属性。
答案 1 :(得分:0)
每个DisplayObject只有转换矩阵(在object.transform.matrix上可用)。值,例如x,y,scaleX,scaleY,rotation,width,height ......只是setter / getter函数,可以使用矩阵。
E.g。 scaleX getter是Math.sqrt(m[0]*m[0] + m[1]*m[1] + m[2]*m[2]);
,它对应于具有由第一行变换矩阵定义的大小的box的对角线。
宽度 getter为o.getBounds(o.parent).width
身高 getter为o.getBounds(o.parent).height
但我仍然不明白,宽度和高度设置器的工作原理。 E.g。
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