簡體   English   中英

了解getViewTreeObserver

[英]Understanding getViewTreeObserver

首先,讓我道歉,但我不知道還有什么要問的。

我想了解下面的代碼

除了getViewTreeObserver位,我了解所有這些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 ,所以我不明白為什么movingView設置它然后再將其刪除。 如果我從該偵聽器中取出yAnimationxAmination行,並xAmination運行它們,則代碼仍然可以正常工作,但是不會返回其原始的X和Y。但是我不明白為什么上面的代碼允許createSpringAnimation功能以接收正確的 X和Y。

拜托,有人可以幫我理解嗎?

Android需要時間在布局中布置View 如果嘗試立即讀取View的任何參數,通常會得到0或框架在設法計算正確值之前使用的任何默認值。 由於此操作是異步的,因此您需要注冊一個偵聽器,以便在布局准備就緒時得到通知。 然后,當然,您可以讀取值並刪除偵聽器,因為不再需要它。 但是要小心,因為有時多次調用該偵聽器,因此在使用這些值之前和注銷該偵聽器之前,請檢查您是否確實設法讀取了有意義的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM