我使用BitmapData.draw
制作图形画布的快照。画布上的一些孩子处于随机位置(包括负面位置)。我应该以某种方式定义要拍摄的矩形边界。
例如,我在视图(画布)中有3个节点:
{10x10, (-5; -3)}
{20x20, (0; 0)}
{30x30, (40; 40)}
在这种情况下,边界应为(-5; -3)(左上)至(70; 70)(右下)。
有没有办法根据子布局定义“真实”元素大小?
可能是来自 Flex 框架的一些方法吗?
答案 0 :(得分:1)
DisplayObject.getBounds()
和DisplayObject.getRect()
是您正在寻找的方法。
两种方法
[返回]一个矩形,它根据
定义显示对象的边界targetCoordinateSpace
参数定义的坐标系
它们之间的区别是:
getBounds()
方法类似于getRect()
方法;但是,getBounds()
方法返回的Rectangle包括形状上的任何笔划,而getRect()
方法返回的Rectangle则不包含。
如果您使用笔画,则可能需要使用getBounds()
答案 1 :(得分:1)
在大多数情况下看起来getBounds()
和getRect()
应该有效,但有时候他们可能在计算右下角时遇到问题,例如,当组件显式调整大小时。
对于我的组件,我发现已经实现了方法(此解决方案也忽略了隐形孩子!):
public function calcDisplayObjecBoundingBox():Rectangle
{
var numChildren:int = this.numChildren;
var result:Rectangle = new Rectangle( 0, 0, 0, 0 );
var i:int = 0;
var child:DisplayObject;
if( numChildren > 0 )
{
//find first visible child and initialize rectangle bounds
for( i = 0; i < numChildren; i++ )
{
child = this.getChildAt( i );
if( child.visible )
{
result.left = child.x;
result.top = child.y;
result.right = child.x + child.width;
result.bottom = child.y + child.height;
i++;
break;
}
}
for( ; i < numChildren; i++ )
{
child = this.getChildAt( i );
if( child.visible )
{
result.left = Math.min( result.left, child.x );
result.right = Math.max( result.right, child.x + child.width );
result.top = Math.min( result.top, child.y )
result.bottom = Math.max( result.bottom, child.y + child.height );
}
}
}
可能它与getBounds()
和getRect()
几乎相同,但是按子项计算右下角,而不是组件本身。