动画视图为什么设置可见性失败?

时间:2012-11-15 13:41:08

标签: android android-animation android-view

使用旋转动画动画ImageView

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class Test extends Activity implements View.OnClickListener {
    private ImageView mIcon;
    private Animation mRotate;
    private boolean mShown = true;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mIcon = new ImageView(this);
        mIcon.setImageDrawable(
              getResources().getDrawable(android.R.drawable.ic_dialog_alert)
              );
        mIcon.setOnClickListener(this);

        setContentView(mIcon);


        mRotate = new RotateAnimation(
                  0f,360f,
                  getWindowManager().getDefaultDisplay().getWidth()/2,
                  getWindowManager().getDefaultDisplay().getHeight()/2
                  );
        mRotate.setDuration(2000);
        mRotate.setRepeatMode(Animation.RESTART);
        mRotate.setRepeatCount(Animation.INFINITE);
        mRotate.setInterpolator(new LinearInterpolator());

        mIcon.setAnimation(mRotate);
    }

    @Override
    public void onClick(View view) {
        if(mShown){
            mRotate.cancel();
            mIcon.setVisibility(View.GONE);
        }else {
            mIcon.setVisibility(View.VISIBLE);
            mRotate.reset();
            mRotate.start();
        }
        mShown = !mShown;
    }
}

部分mProgress.setVisibility(GONE);不起作用。 ImageView根本不隐藏。如果我没有为它设置Animation,那么效果很好。

我的问题是:为什么动画视图的可见性没有变化?

更新: 在FrameLayout中设置视图并设置FrameLayout的可见性。但是,这仍然是一个丑陋的解决方法。

4 个答案:

答案 0 :(得分:2)

我认为它的工作原理应该如此。让我解释。这里重要的是如何您的ImageView是动画的。如果你使用例如TranslateAnimation(我想这是你的情况)那么你动画的视图实际上并没有改变位置,它只是移动到屏幕的其他地方,所以例如如果你用这种方式设置动画按钮,想要点击它,你仍然需要点击它以前的位置。因此,在这种情况下,我认为您的ImageViewGONE,但您只能看到动画制作的图纸。 使用ObjectAnimator应该可以解决这个问题,因为与其他动画相反,它实际上会移动视图。

答案 1 :(得分:0)

尝试

mProgress.setVisibility(View.GONE);

而不是

mProgress.setVisibility(已废弃的);

答案 2 :(得分:0)

尝试设置mRotate.setFillAfter(false)。您的视图可见性确实消失了,但动画的最终状态保持其位置。

答案 3 :(得分:0)

在将可见性设置为GONE之前,请尝试执行mIcon.clearAnimation()。