Apache flex 在父对象上更改scaleX/scaleY会缩放子对象,但不会更新“高度/宽度”属性?
我创建了一个自定义组件MyImage,它有两个子组件,包括一个位图和一个精灵 我的显示对象层次结构如下-Apache flex 在父对象上更改scaleX/scaleY会缩放子对象,但不会更新“高度/宽度”属性?,apache-flex,flash,Apache Flex,Flash,我创建了一个自定义组件MyImage,它有两个子组件,包括一个位图和一个精灵 我的显示对象层次结构如下- mx:Canvas view:MyImage mx:Bitmap my:Sprite 如果我更改MyImage.scaleX、scaleY属性,子对象将按预期进行缩放 但是,当我尝试在获取调整大小事件时再次使用place将子对象放置在中心时: public function placeAgain():void { if (image=
mx:Canvas
view:MyImage
mx:Bitmap
my:Sprite
如果我更改MyImage.scaleX、scaleY属性,子对象将按预期进行缩放
但是,当我尝试在获取调整大小事件时再次使用place将子对象放置在中心时:
public function placeAgain():void
{
if (image==null) return;
var pCanvas:Canvas = this.parent as Canvas;
if (image.width <= pCanvas.width)
{
pCanvas.horizontalScrollPolicy="off";
image.x = (pCanvas.width -image.width)/2;
}
else
{
pCanvas.horizontalScrollPolicy="on";
image.x=0;
}
if (image.height <= pCanvas.height)
{
pCanvas.verticalScrollPolicy="off";
image.y = (pCanvas.height -image.height)/2;
}
else
{
pCanvas.verticalScrollPolicy="on";
image.y=0;
}
alignKids();
}
我发现图像的高度和宽度没有改变,尽管图像被缩放了
在缩放父对象后,子对象不应该更改其边界吗?尤其是在孩子已经被正确缩放之后?为什么子对象的边界与缩放之前的值相同?我没有缓存位图,没有打开位图缓存。让我们看看
不
还是没有
简言之,让你的开发工作更容易,因为你不必遍历所有的孩子,重新调整他们的宽度/高度/x/y,从而回答你的第四个问题。使用一些固定值,对父对象和bam!应用缩放!,rest flash会处理其余的内容。
此外,这也是您在提问之前可以自己尝试的事情之一,因为设置已经存在…我是否需要手动递归所有子对象及其子对象,查找显示对象并手动更新其宽度/高度/x/y?这就是我希望它能够工作的方式。我认为缩放本质上是放大/缩小。它不会更改组件的坐标系,也不会更改组件或组件子级的大小。这只会改变他们的感知大小。我不确定我是否理解你所说的-我已经尝试了所有导致这些问题的场景。让开发人员的工作更轻松,因为您不必遍历所有的子对象并重新调整它们的宽度/高度/x/y事实上,您只需这样做,因为仅Flash zoom的子对象不会更改诸如x、y、宽度等属性。为什么要手动更改它们的坐标和尺寸?当然,您可以这样做,不使用scale,而是修改父对象的大小,并且必须递归地重新计算子对象的大小并重新定位它们。但在我看来,这似乎是一种复杂的方式。您可能会遇到需要这样做的场景,但我现在想不出任何方案……一个原因可能是需要调整svg图像的大小,根据我的经验,svg图像在Flex中的伸缩性不好。