事件如果容器缩放,则其本身及其子级都不会更改宽度值,那么它们如何更改其宽度?
<?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>发布于 2012-11-09 00:15:42
scaleX和scaleY不会以任何方式影响对象的实际大小。缩放属性只需修改它们在屏幕上的显示方式。对于应用程序来说,50x50框仍然是50x50,即使它在scaleX = scaleY = 4屏幕上看起来是200x200。
缩放是以这种方式完成的,因此原始大小永远不会丢失。这样,您可以自由地重复缩放对象,使其始终相对于原始大小。
我不确定scale属性实际上是如何工作的。如果您实际深入研究DisplayObject的一些属性,就会发现有多个宽度值(width、measuredWidth、explicitWidth以及UIComponent中的percentWidth )。我的猜测(不幸的是,纯粹是猜测)是其中一个值发生了变化,而宽度/高度值保持不变。
如果需要缩放对象的宽度/高度值,只需将宽度/高度值乘以它们各自的缩放属性即可。
发布于 2014-07-05 06:23:52
每个DisplayObject仅具有变换矩阵(在object.transform.matrix上提供)。值,例如x,y,scaleX,scaleY,rotation,width,height ...只是setter / getter函数,与矩阵一起工作。
例如,scaleX getter是Math.sqrt(m[0]*m[0] + m[1]*m[1] + m[2]*m[2]);,它对应于具有由变换矩阵的第一行定义的大小的框的对角线。
宽度 getter为o.getBounds(o.parent).width
height getter为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.4https://stackoverflow.com/questions/13289034
复制相似问题