setTranslationY未正确初始化

问题描述:

我创建了两个简短的方法来帮助我在选中某个复选框时显示或隐藏视图。 我有一个初始化复选框和视图的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()方法中完成的。

有人知道为什么会发生这种情况吗?看起来一旦创建视图,翻译就不会被考虑。

该视图尚未绘制,因此它的高度未知(因此等于0)。

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

希望这会有所帮助!

+0

谢谢。我怀疑过这样的事情,但我找不到要点。这对我有很大的帮助。 –