0

Androidで、メインビューにアニメーションを追加するときに、アニメーションをビューに追加するにはどうすればよいですか。たとえば、ゆっくりと成長してメインビューを占有します。可能だと思いますが、どこから始めれば、他のビューが削除されたときにListViewを拡張する必要があります。

ありがとう

4

1 に答える 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 に答える