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
,它就可以正常工作。
我的问题是:为什么动画 View 的可见性没有改变?
更新:
将 View 包装在 FrameLayout
中并设置 FrameLayout
的可见性是可行的。但是,这仍然是一个丑陋的解决方法。
最佳答案
我认为它可以正常工作。让我解释。这里重要的是如何您的ImageView
是动画的。例如,如果您使用 TranslateAnimation
(我猜这是您的情况),那么您设置动画的 View 实际上不会改变位置,它只会移动到屏幕上的其他位置,例如,如果您设置按钮动画这样,想要点击它,你仍然必须点击它以前的位置。所以在这种情况下,我认为您的 ImageView
是 GONE
,但您只能看到由动画制作的绘图。
使用 ObjectAnimator
应该可以解决这个问题,因为与其他动画相反,它实际上移动了 View 。
关于android - 为什么为带有动画的 View 设置可见性失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398673/