setTranslationY 未正确初始化
setTranslationY not initialized correctly
我创建了两个简短的方法来帮助我在选中某个复选框时显示或隐藏视图。
我有一个 Init 方法,我在其中初始化一个复选框和一个视图,以及一个从复选框状态更改侦听器内部调用的切换方法,并使用动画切换视图状态。
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 动画上运行良好,但在平移动画上有一个小问题,尽管它们的处理和初始化方式完全相同。为什么?
特别是,只要复选框状态发生变化,翻译就可以正常工作,但是当复选框开始关闭时,视图不可见,只有在非常第一个状态变化时,视图才会出现带有 alpha 动画但不执行翻译动画。
看起来刚刚创建视图时,它的翻译状态未初始化,而 alpha 状态是,虽然它是在 toggleViewVisibilityInit() 方法中完成的。
有人知道为什么会这样吗?看起来一旦创建视图就不会考虑翻译。
视图尚未绘制,因此它的高度未知(因此等于 0)。
如果你知道这一点,就很容易找到解决方案,例如。 getWidth() and getHeight() of View returns 0
希望对您有所帮助!
我创建了两个简短的方法来帮助我在选中某个复选框时显示或隐藏视图。 我有一个 Init 方法,我在其中初始化一个复选框和一个视图,以及一个从复选框状态更改侦听器内部调用的切换方法,并使用动画切换视图状态。
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 动画上运行良好,但在平移动画上有一个小问题,尽管它们的处理和初始化方式完全相同。为什么?
特别是,只要复选框状态发生变化,翻译就可以正常工作,但是当复选框开始关闭时,视图不可见,只有在非常第一个状态变化时,视图才会出现带有 alpha 动画但不执行翻译动画。 看起来刚刚创建视图时,它的翻译状态未初始化,而 alpha 状态是,虽然它是在 toggleViewVisibilityInit() 方法中完成的。
有人知道为什么会这样吗?看起来一旦创建视图就不会考虑翻译。
视图尚未绘制,因此它的高度未知(因此等于 0)。
如果你知道这一点,就很容易找到解决方案,例如。 getWidth() and getHeight() of View returns 0
希望对您有所帮助!