Flex:获取控件集合的高度

时间:2014-10-01 20:33:33

标签: flex layout

或者更准确地说,我希望能够将控件顶部到其中一个孩子的顶部之间的距离(并且添加上述所有孩子的高度成员会产生似是而非的结果!)但是获得绝对坐标并比较它们的过程看起来真的搞砸了。

我使用此函数计算2个标签顶部之间的高度:

        private static function GetRemainingHeight(oParent:Container, oChild:Container,  
                            yParent:Number, yChild:Number):Number {
            const ptParent:Point = oParent.localToGlobal(new Point(0, yParent));
            const ptChild:Point = oChild.localToGlobal(new Point(0, yChild));
            const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y;
            trace(ptChild.y.toString() + '[' + yChild.toString() + '] - ' +
            ptParent.y.toString() + '[' + yParent.toString() + '] = ' + nHeightOfEverythingAbove.toString() + ' > ' + oParent.height.toString());
            return nHeightOfEverythingAbove;
         }

请注意oParent.y == yParentoChild.y == yChild,但出于绑定原因,我这样做了。 我得到的结果非常令人惊讶:

  

822 [329] - 124 [0] = 698> 439

这是不可能的,因为oChild的顶部不会消失在oParent之下。我发现意外的唯一数字是ptChild.y。所有其他数字看起来都很合理。所以我假设我的错误在于减去两个不应该具有可比性的数字。

当然,如果有人计算两点之间不同localToGlobal()的差异的方法,那也没关系。

我正在使用3.5 SDK。

1 个答案:

答案 0 :(得分:0)

我通过查看http://rjria.blogspot.ca/2008/05/localtoglobal-vs-contenttoglobal-in.html(包括评论)找到了部分答案。它讨论我是否应该使用localToGlobal()或contentToGlobal(),但它填补了Adobe的文档留下的一些空白,即通过提供函数new Point(0, 0)获得全局坐标。最后,我使用了这个:

    public static function GetRemainingHeight(oParent:DisplayObject, oChild:DisplayObject,
                yParent:Number, yChild:Number):Number {
        const ptParent:Point = oParent.localToGlobal(new Point(0, 0));
        const ptChild:Point = oChild.localToGlobal(new Point(0, 0));
        const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y;
        return nHeightOfEverythingAbove;
    }

查看问题以获取对看似不必要的参数的解释,现在看起来它们可能真的无关紧要。

然而,我并不像我想象的那样经常需要这个功能,而且我对它的工作方式并不是非常高兴。我已经了解到我已经完成它的方式,不可能将所有这些参数都设置为函数Bindable,并期望在更改{{{{{}}时调用此函数。 1}}制作。在一种情况下,我不得不在oChild事件的处理程序中调用此函数。