问题
在安卓中使用动画将一个view弹出布局时,如果它本来是GONE掉的,那么你可能会想在动画的onAnimationStart()
时显示,然后在onAnimationEnd()
时隐藏它。
但是很快会发现,这样的话动画会无法及时显示出来,而是只有其他的view显示出来的时候它才会姗姗来迟。那么是什么原因呢?
查了很多资料才知道,不能在 onAnimationStart()
时才显示,必须在动画开始之前就显示(View.VISIBLE)出来
解决方法
//定义一个放大动画
ScaleAnimation circularAnim = new ScaleAnimation(1.0f, 50f, 1.0f, 50f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
circularAnim.setDuration(500);
circularAnim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//mImageView.setVisibility(View.VISIBLE); // 注意: 不该在动画开始时set VISIBLE,不然会看不到动画
}
@Override
public void onAnimationEnd(Animation animation) {
mImageView.setVisibility(View.GONE);
// TODO Something...
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
//点击开始按钮时播放动画
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mImageView.setVisibility(View.VISIBLE); //而应该在开始动画之前set VISIBLE
mImageView.startAnimation(circularAnim);
}
});