使用旋转动画动画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
的可见性。但是,这仍然是一个丑陋的解决方法。
答案 0 :(得分:2)
我认为它的工作原理应该如此。让我解释。这里重要的是如何您的ImageView
是动画的。如果你使用例如TranslateAnimation
(我想这是你的情况)那么你动画的视图实际上并没有改变位置,它只是移动到屏幕的其他地方,所以例如如果你用这种方式设置动画按钮,想要点击它,你仍然需要点击它以前的位置。因此,在这种情况下,我认为您的ImageView
是GONE
,但您只能看到动画制作的图纸。
使用ObjectAnimator
应该可以解决这个问题,因为与其他动画相反,它实际上会移动视图。
答案 1 :(得分:0)
尝试
mProgress.setVisibility(View.GONE);
而不是
mProgress.setVisibility(已废弃的);
答案 2 :(得分:0)
尝试设置mRotate.setFillAfter(false)。您的视图可见性确实消失了,但动画的最终状态保持其位置。
答案 3 :(得分:0)
在将可见性设置为GONE之前,请尝试执行mIcon.clearAnimation()。