2

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;
    }
}
4

3 に答える 3

5

これを試して:

v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);


int initialHeight = v.MeasuredHeight; 
于 2013-09-11T11:20:08.020 に答える
1

ビューの高さと幅を測定してみてください -

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus)
        {
            // Get the height and the width of the view 
        }
    }
于 2013-09-11T11:00:04.473 に答える
0

ビューが実際にレイアウトされるまで (レンダリングの直前)、高さと幅は常に 0 になります。

onMeasureまたは(私が思うに)で高さを測定する場合、高さはonLayoutゼロではないはずです

于 2013-09-11T10:53:35.803 に答える