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(我想这是您的情况),那么您设置动画的视图实际上不会改变位置,它只会移动到屏幕上的其他位置,因此,例如,如果您这样设置按钮的动画并想单击它,您仍然必须单击它的上一个位置。因此,在本例中,我认为您的ImageViewGONE,但您只看到由动画绘制的图形。
使用ObjectAnimator应该可以解决这个问题,因为与其他动画相反,它实际上会移动视图。

07-24 09:47
查看更多