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
的可见性可以工作。但是,这仍然是一个丑陋的解决办法。 最佳答案
我认为这是应该的。让我解释一下。这里重要的是如何设置ImageView
的动画。如果您使用例如TranslateAnimation
(我想这是您的情况),那么您设置动画的视图实际上不会改变位置,它只会移动到屏幕上的其他位置,因此,例如,如果您这样设置按钮的动画并想单击它,您仍然必须单击它的上一个位置。因此,在本例中,我认为您的ImageView
是GONE
,但您只看到由动画绘制的图形。
使用ObjectAnimator
应该可以解决这个问题,因为与其他动画相反,它实际上会移动视图。