0

在android中,当将动画添加到主视图时,如何将动画添加到视图中,例如缓慢增长并占据主视图。我认为这是可能的,但从哪里开始,当其他视图被删除时,我的 ListView 需要它来扩展。

谢谢

4

1 回答 1

1

我有一个演示。添加或隐藏视图时上下移动非常顺畅

public class ExpandAnimation extends Animation {
private View mAnimatedView;
private LayoutParams mViewLayoutParams;
private int mMarginStart, mMarginEnd;
private boolean mIsVisibleAfter = false;
private boolean mWasEndedAlready = false;
ImageButton mImageButton;

/**
 * Initialize the animation
 * @param view The layout we want to animate
 * @param duration The duration of the animation, in ms
 */
public ExpandAnimation(View view, int duration, ImageButton button) {
    this.mImageButton = button;
    setDuration(duration);
    mAnimatedView = view;
    mViewLayoutParams = (LayoutParams) view.getLayoutParams();

    // if the bottom margin is 0,
    // then after the animation will end it'll be negative, and invisible.
    mIsVisibleAfter = (mViewLayoutParams.bottomMargin == 0);

    mMarginStart = mViewLayoutParams.bottomMargin;
    mMarginEnd = (mMarginStart == 0 ? (0- view.getHeight()) : 0);

    view.setVisibility(View.VISIBLE);
    button.setImageResource(R.drawable.bar_down);
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    super.applyTransformation(interpolatedTime, t);

    if (interpolatedTime < 1.0f) {

        // Calculating the new bottom margin, and setting it
        mViewLayoutParams.bottomMargin = mMarginStart
                + (int) ((mMarginEnd - mMarginStart) * interpolatedTime);

        // Invalidating the layout, making us seeing the changes we made
        mAnimatedView.requestLayout();

    // Making sure we didn't run the ending before (it happens!)
    } else if (!mWasEndedAlready) {
        mViewLayoutParams.bottomMargin = mMarginEnd;
        mAnimatedView.requestLayout();

        if (mIsVisibleAfter) {
            mAnimatedView.setVisibility(View.GONE);
            mImageButton.setImageResource(R.drawable.bar_up);
        }
        mWasEndedAlready = true;
    }
}

}

btnShowBookmarkBar.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            animation = new ExpandAnimation(bookmarkControlView, 
                    CommConstant.DEFAULT_SHOW_UP_TIME, btnShowBookmarkBar);
            btnShowBookmarkBar.startAnimation(animation);
        }
    });
于 2012-06-04T06:47:08.697 回答