0

スライド ドロワーに似たスライド パネルをレイアウトに追加しようとしていますが、メイン レイアウトの左側に配置され、オーバーレイされない点が異なります。レイアウトの左上に小さなボタンがあり、クリックするとパネルが展開/折りたたまれます。展開/折りたたみ時に、隣接するビューも移動するようにアニメーションをスムーズにしたい. これが私が試したコードです。最初の展開/折りたたみの後、パネルは機能しなくなります。

public Animation expandHiddenPanel(final View v, final boolean expand) {
    panelExpanded = expand;
    v.measure(MeasureSpec.makeMeasureSpec(200, MeasureSpec.AT_MOST), 
              MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    final int initialWidth = v.getMeasuredWidth();
    Log.i("test", "initialWidth = " + initialWidth);

    v.getLayoutParams().width = 0;
    v.setVisibility(View.VISIBLE);

    Animation a = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            int newWidth;

            if (expand) {
                newWidth = (int)(initialWidth * interpolatedTime);
                Log.i("test", "new Width = " + newWidth);
            }
            else {
                newWidth = (int)(initialWidth * (1 - interpolatedTime));
                Log.i("test", "new Width = " + newWidth);
            }

            v.getLayoutParams().width = newWidth;
            v.requestLayout();              
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    a.setInterpolator(new AccelerateInterpolator());
    a.setDuration(2500);
    v.startAnimation(a);

    return a;
}
4

1 に答える 1