【Android】view.setVisibility(View.GONE)导致动画无效

问题

在安卓中使用动画将一个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);
    }
});

参考资料:

1、An easy way to make GONE animation work

2、android animation view.setVisibility(View.GONE)导致动画无效

你可能感兴趣的:(Android,Android开发笔记)