【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)导致动画无效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值