1

開発オプションの[アクティビティを保持しない]がオンのときに正常に動作するアプリがあります。

でもOFFの時は

アプリがバックグラウンドに移行して再開するたびに、onCreate関数が再度呼び出されます。そこで、最後のアプリの状態を再作成しています。

ここで問題となるのは、ユーザーアクションで発生する単純なアニメーションが開始されず、アニメーションハンドラーが呼び出されないことです。

アニメーションが無視されているようです。そして、これは、アクティビティが強制終了されて再度作成された場合にのみ発生します。

そして、最も奇妙な部分は、4つのアニメーションがあり、1つのイメージビュー(開く、閉じる)用に2つ、別のイメージビュー(開く、閉じる)用に2つあることです。

そして、これはオープニングアニメーションでオンリーに発生します。

手伝ってくれませんか。

アニメーションxml(開始/終了アニメーションの1つ用)

redShowアニメーション

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@android:anim/linear_interpolator">
  <alpha
      android:fromAlpha="0.1"
      android:toAlpha="1.0"
      android:duration="800"
      /> 
  <scale android:fromXScale="0.0"
      android:toXScale="1.0"
      android:fromYScale="0.0"
      android:toYScale="1.0"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="800">

  </scale>
</set>

redHideアニメーション

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@android:anim/linear_interpolator">
  <alpha
      android:fromAlpha="1.0"
      android:toAlpha="0.0"
      android:duration="300"
      />
  <scale android:fromXScale="1.0"
      android:toXScale="0.0"
      android:fromYScale="1.0"
      android:toYScale="0.0"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="300">

  </scale>
</set>

私がものを初期化しているコード(onCreateで)

red = (ImageView) findViewById(R.id.red);

redHide = AnimationUtils.loadAnimation(this, R.anim.red_hide);
redHide.setFillAfter(true);
redHide.setAnimationListener(this);

redShow = AnimationUtils.loadAnimation(this, R.anim.red_show);          
redShow.setFillAfter(true);
redShow.setAnimationListener(this);

ハンドラーと私が呼び出しているメソッド

private void showRed() {
    red.startAnimation(redShow); //this is the one that is not happening
}

private void hideRed() {
     red.startAnimation(redHide);
}

@Override
public void onAnimationEnd(Animation a) {   
}

@Override
public void onAnimationRepeat(Animation a) {
}

@Override
public void onAnimationStart(Animation a) {
}

G

4

1 に答える 1

4

あなたが試すことができることは次のとおりです。

  • 代わりに、onResume()でアニメーションを初期化します。
  • 各アニメーションを開始する前に、clearAnimation()を呼び出します。
  • fillAfter()を使用せずにアニメーション化してみてください。アニメーションが、何らかの理由で最新の状態にロックされている可能性があります。

いくつかのアイデア..

表示しているコードは問題ないように見えるため、最後のアプリの状態を再現していると書いたときに、赤い警告ランプが点滅しました。

于 2012-11-21T15:48:22.233 に答える