2016-11-16 425 views
0

我創建了兩個簡短的方法來幫助我在選中某個複選框時顯示或隱藏視圖。 我有一個初始化複選框和視圖的Init方法,以及從複選框狀態更改偵聽器中調用的切換方法,並使用動畫切換視圖狀態。setTranslationY未正確初始化

void toggleViewVisibility(final boolean b, final View v) { 
    v.setAlpha(b ? 0.0f : 1.0f); 
    v.setTranslationY(b ? v.getHeight() : 0); 
    if (b) { 
     v.setVisibility(View.VISIBLE); 
     v.animate().alpha(1.0f).translationY(0).setDuration(400); 
    } else { 
     v.animate().alpha(0.0f).translationY(v.getHeight()).setDuration(400).setListener(new Animator.AnimatorListener() { 
      @Override public void onAnimationStart(Animator animator) {} 
      @Override public void onAnimationEnd(Animator animator) { v.setVisibility(View.GONE); } 
      @Override public void onAnimationCancel(Animator animator) {} 
      @Override public void onAnimationRepeat(Animator animator) {} 
     }); 
    } 
} 

void toggleViewVisibilityInit(final boolean b, final View v, final AnimateCheckBox c) { 
    v.setAlpha(b ? 1.0f : 0.0f); 
    v.setTranslationY(b ? 0 : v.getHeight()); 
    v.setVisibility(b ? View.VISIBLE : View.GONE); 
    c.setChecked(b); 
} 

它正常工作與奧飛動漫,但有一個小問題與翻譯的動畫,但他們的待遇,並在完全相同的方式進行初始化。爲什麼?

特別是,只要複選框狀態發生變化,翻譯就可以正常工作,但當複選框啓動時,視圖不可見,只有在非常優先的狀態下才會更改視圖,但不會執行翻譯動畫。 看起來,當視圖剛剛創建時,它的翻譯狀態並未初始化,而alpha狀態是,儘管它是在toggleViewVisibilityInit()方法中完成的。

有人知道爲什麼會發生這種情況嗎?看起來一旦創建視圖,翻譯就不會被考慮。

回答

1

該視圖尚未繪製,因此它的高度未知(因此等於0)。

如果你知道這一點,很容易找到解決方案,例如。 getWidth() and getHeight() of View returns 0

希望這會有所幫助!

+0

謝謝。我懷疑過這樣的事情,但我找不到要點。這對我有很大的幫助。 –