アプリにトランジションを実装しようとしていますが、overridePendingTransition(anim、anim)が正しく機能していません。
私のコードはシンプルで標準的です:
インテントを開始し、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>
編集:私がすべてのアクティビティを開始するという事実を忘れていました拡張「メイン」アクティビティ。これが問題の原因である可能性がありますか?
私はこれが古い記事であることを知っていますが、私はそれを見て、答える義務があると感じました:
これは非常にあいまいな問題であり、デバイスに関連しています。当時はiOcean X7を使っていました。後で、この電話ではアニメーションを再生できないことがわかりました。一部のアプリではアニメーションを再生しませんでした。
次のように、finish()
を呼び出した後にpendingTransitionを呼び出そうとします。
Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
finish();
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
USBデバッグモードを有効にすると、遷移効果が無効になる場合があります。開発者オプションを入力し(デバッグモードをアクティブにした場合)、ユーザーのインターフェイスセクションを見つけ、アニメーションの遷移スケールでアニメーションが無効になっているかどうかを確認します。その場合は、0.5倍に設定します。できた!
これを使ってみてください:
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)
}
}
あなたのコードの代わりに。
Android version> = 21を使用している場合、Android:windowActivityTransitions属性をtrueにstyle.xmlvalues-v21フォルダー内のファイルは次のとおりです。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:windowActivityTransitions">true</item>
</style>
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());
デバイスの開発者オプションに移動します。さらに3つのオプションウィンドウアニメーションスケール、遷移アニメーションスケール、アニメーション継続時間スケールがあります。すべてがオフになっていないことを確認してください。これは私が出会った理由の1つです。
おそらくあなたは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;
}
デバイスが省電力モードになっていることを確認してください。省電力モードではアニメーションは機能しません。