2012-06-04 148 views

回答

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