Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解getViewTreeObserver_Java_Android - Fatal编程技术网

Java 了解getViewTreeObserver

Java 了解getViewTreeObserver,java,android,Java,Android,首先,让我解释一下,但我不知道还能问什么 我想了解以下代码,可以 除了getViewTreeObserver位之外,我还了解所有内容: movingView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { yAnimation = creat

首先,让我解释一下,但我不知道还能问什么

我想了解以下代码,可以

除了
getViewTreeObserver
位之外,我还了解所有内容:

movingView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        yAnimation = createSpringAnimation(movingView,SpringAnimation.Y, movingView.getY(), STIFFNESS, DAMPING_RATIO);
        xAnimation = createSpringAnimation(movingView,SpringAnimation.X, movingView.getX(), STIFFNESS, DAMPING_RATIO);
        movingView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }
});
我们为什么需要这一点?最后一行,从
movingView
中删除了
OnGlobalLayoutListener
,因此我不明白为什么要设置它然后删除它。如果我从这个侦听器中取出
yAnimation
xAmination
行,然后自己运行它们,代码仍然可以正常工作,但是它不会返回到原始的X和Y。但是我不明白为什么上面的代码允许
createSpringAnimation
函数接收正确的X和Y


请,有人能帮我理解吗?

Android需要时间在您的布局中布置
视图。如果您试图直接读取视图的任何参数,通常会得到0或框架在计算正确值之前使用的任何默认值。
由于此操作是异步的,因此需要注册一个侦听器,以便在布局就绪时收到通知。当然,您可以读取这些值并删除侦听器,因为不再需要它了。

但是要小心,因为有时会多次调用侦听器,所以在使用这些值和注销侦听器之前,请检查您是否确实读取了有意义的值。

这里还有另一个解释,谢谢您-这真的很有帮助。那么,我如何检查有意义的值呢?我猜任何不是0.0f的值都可以?是的,我通常只检查这些值是否为非零