LinearLayout の折りたたみにアニメーションを適用しようとしています。このアニメーションは、値が 0 より大きい LinearLayout の MeasuredHeight プロパティに依存しますが、値は常に 0 です。
これは私が使用しているコードです:
public void Collapse()
{
var v = FindViewById<LinearLayout>(Resource.Id.layoutBranding);
int initialHeight = v.MeasuredHeight; // always 0!!
var a = new MyAnimation(v, initialHeight);
a.Duration = (int)(initialHeight / v.Context.Resources.DisplayMetrics.Density);
v.StartAnimation(a);
}
MyAnimation は次のように定義されます。
public class MyAnimation : Animation { プライベート readonly View _view; プライベート読み取り専用 int _initalHeight;
public MyAnimation(View view, int initalHeight)
{
_view = view;
_initalHeight = initalHeight;
}
protected override void ApplyTransformation(float interpolatedTime, Transformation t)
{
if (interpolatedTime == 1)
{
_view.Visibility = ViewStates.Gone;
}
else
{
_view.LayoutParameters.Height = _initalHeight - (int) (_initalHeight*interpolatedTime);
_view.RequestLayout();
}
}
public override bool WillChangeBounds()
{
return true;
}
}