web-dev-qa-db-ja.com

overridePendingTransitionが機能しない

アプリにトランジションを実装しようとしていますが、overridePendingTransition(anim、anim)が正しく機能していません。

  • ウィンドウ遷移が有効になっています
  • コードをデバッグした後、コンパイラは呼び出しを実行していると言えますが、表示されていません
  • 私はoverridePendingTransition()の前にfinish()を呼び出してみましたが、これは効果がないようです

私のコードはシンプルで標準的です:

インテントを開始し、overridePendingTransitionを呼び出す:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
finish();

開始アニメーションは何もしないでください。フェードアニメーションだけが効果を持つはずです。

slide_no_move XML:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromYDelta="0%p" Android:toYDelta="0%p"
Android:duration="500"/>

xMLをフェード:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" 
 Android:fillAfter="true">
 <alpha Android:fromAlpha="1.0" 
        Android:toAlpha="0.0"
        Android:duration="500"/>
</set>

編集:私がすべてのアクティビティを開始するという事実を忘れていました拡張「メイン」アクティビティ。これが問題の原因である可能性がありますか?

15
Tim Kranen

私はこれが古い記事であることを知っていますが、私はそれを見て、答える義務があると感じました:

これは非常にあいまいな問題であり、デバイスに関連しています。当時はiOcean X7を使っていました。後で、この電話ではアニメーションを再生できないことがわかりました。一部のアプリではアニメーションを再生しませんでした。

4
Tim Kranen

次のように、finish()を呼び出した後にpendingTransitionを呼び出そうとします。

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
finish();
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
28
Damien R.

USBデバッグモードを有効にすると、遷移効果が無効になる場合があります。開発者オプションを入力し(デバッグモードをアクティブにした場合)、ユーザーのインターフェイスセクションを見つけ、アニメーションの遷移スケールでアニメーションが無効になっているかどうかを確認します。その場合は、0.5倍に設定します。できた!

22

これを使ってみてください:

    public class More2013Activity extends Activity{
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          overridePendingTransition(R.anim. slide_no_move, R.anim.fade_in);
          setContentView(R.layout.more_activity)
      }
    }

あなたのコードの代わりに。

13
hardartcore

Android version> = 21を使用している場合、Android:windowActivityTransitions属性をtruestyle.xmlvalues-v21フォルダー内のファイルは次のとおりです。

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

       <item name="Android:windowActivityTransitions">true</item>

   </style>
10
Prasad

6.0以降では、このメソッドを使用してカスタムアニメーションをオーバーライドします

ActivityOptions options = ActivityOptions.makeCustomAnimation(context,R.anim.slide_from_right, R.anim.slide_to_left);
Intent intent = new Intent(context, WhichActivityToOpen.class);
context.startActivity(intent, options.toBundle());
7
koteswara D K

デバイスの開発者オプションに移動します。さらに3つのオプションウィンドウアニメーションスケール、遷移アニメーションスケール、アニメーション継続時間スケールがあります。すべてがオフになっていないことを確認してください。これは私が出会った理由の1つです。

6
user1154390

おそらくあなたはonPause()メソッドでもoverridePendingTransition(anim、anim)を使用しています。私も同じ問題を抱えていましたが、小さなトリックで解決しました。

1:クラスのブール値をonCreate()メソッドの前に定義します

private boolean trans=true;

@Override
protected void onCreate(Bundle savedInstanceState) {...

2:Put trans = false; startActivityを使用する場合

Intent newsIntent = newIntent(ZPFActivity.this,More2013Activity.class);         
 trans = false;        
 startActivity(newsIntent);        
 overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

3:そしてonPause()メソッドでこれを行います

@Override
protected void onPause() {
    if (trans) {
        overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
    }
    super.onPause();
}

4:そしてonResume()メソッドでこれを行います

@Override
protected void onResume() {
    super.onResume();
    trans=true;
}
2
Mehran Elyasi

デバイスが省電力モードになっていることを確認してください。省電力モードではアニメーションは機能しません。

1
Anshad Ali KM