对于动画,我需要从View知道高度。问题是,除非绘制了View,否则getHeight()方法始终返回0。
那么有没有办法在不绘制高度的情况下获得高度?
在这种情况下,View是LinearLayout。
编辑:
我尝试改编https://github.com/Udinic/SmallExamples/blob/master/ExpandAnimationExample/src/com/udinic/expand_animation_example/ExpandAnimation.java中的展开动画
有了它,我想扩展一个列表项的更多信息。
我无法通过xml达到相同的效果。
目前,只有在绘制前知道布局大小时,动画才起作用。
最佳答案
听起来好像您想获取高度,但在 View 可见之前将其隐藏。
首先将 View 中的可见性设置为可见或不可见(只是为了创建高度)。不用担心,我们将在代码中将其更改为不可见/消失,如下所示:
private int mHeight = 0;
private View mView;
class...
// onCreate or onResume or onStart ...
mView = findViewByID(R.id.someID);
mView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
// gets called after layout has been done but before display
// so we can get the height then hide the view
mHeight = mView.getHeight(); // Ahaha! Gotcha
mView.getViewTreeObserver().removeGlobalOnLayoutListener( this );
mView.setVisibility( View.GONE );
}
});