gpt4 book ai didi

java - 了解 getViewTreeObserver

转载 作者:行者123 更新时间:2023-12-02 10:46:48 25 4
gpt4 key购买 nike

首先,请允许我道歉,但我不知道还能问哪里。

我想理解下面的代码可以是found here.

除了 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但我不明白为什么上面的代码允许 createSpringAnimation 函数接收正确的 X 和 Y。

请问有人可以帮我理解吗?

最佳答案

Android 需要时间在布局中布置 View。如果您尝试立即读取 View 的任何参数,您通常会得到 0 或框架在计算正确值之前使用的任何默认值。由于此操作是异步的,因此您需要注册一个监听器,以便在布局准备就绪时收到通知。然后,当然,您可以读取这些值并删除监听器,因为不再需要它了。但要小心,因为有时监听器会被多次调用,因此在使用值之前和取消注册监听器之前,请检查您是否确实设法读取了有意义的值。

关于java - 了解 getViewTreeObserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com