3

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とうまくいきます。

私の質問は、アニメーションビューの可視性が変わらないのはなぜですか?

更新:ビューをaでラップし、FrameLayout設定FrameLayoutの可視性が機能します。しかし、それでも、これは醜い回避策です。

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 に答える