3

AnImageView使用旋转动画进行动画处理:

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 包装在 aFrameLayout和 settingFrameLayout的可见性中。但是,这仍然是一个丑陋的解决方法。

4

4 回答 4

2

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

于 2012-11-15T13:52:47.527 回答
0

尝试

mProgress.setVisibility(View.GONE);

代替

mProgress.setVisibility(GONE);

于 2012-11-15T15:50:42.357 回答
0

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

于 2015-03-20T10:21:11.987 回答
0

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

于 2012-11-15T15:56:04.237 回答