Nonaktifkan animasi geser-masuk aktivitas saat meluncurkan aktivitas baru?

144

Saya memiliki aktivitas yang meluncurkan aktivitas lain, melalui klik tombol. Secara default, pada versi OS Android yang lebih baru, OS akan menganimasikan aktivitas baru yang meluncur dari kanan ke kiri.

Apakah ada cara untuk menonaktifkan animasi ini? Saya hanya ingin aktivitas baru muncul tanpa animasi apa pun.

pengguna246114
sumber

Jawaban:

194

The FLAG_ACTIVITY_NO_ANIMATIONbendera berfungsi dengan baik untuk menonaktifkan animasi ketika memulai kegiatan.

Untuk menonaktifkan animasi serupa yang dipicu saat memanggil finish()suatu Aktivitas, yaitu animasi bergeser dari kanan ke kiri, Anda dapat memanggil overridePendingTransition(0, 0)setelah memanggil finish()dan animasi berikutnya akan dikecualikan.

Ini juga berfungsi pada in-animation jika Anda menelepon overridePendingTransition(0, 0)setelah menelepon startActivity(...).

Mattias
sumber
9
Perhatikan bahwa FLAG_ACTIVITY_NO_ANIMATIONdan overridePendingTransitionkeduanya hanya API Level 5+.
azdev
1
Ini tidak membantu saat kembali dari aktivitas dengan menekan tombol Kembali.
Yar
4
Kamu yang terbaik. overridePendingTransition (0, 0) -> seperti dewa. Ini hanya mengganti animasi finish (), tetapi bukan animasi yang dipicu saat melanjutkan aktivitas sebelumnya.
Philipp Jahoda
1
Saya tidak menyukai jawaban ini karena tidak mencakup transisi yang disebabkan oleh menekan tombol softkey 'kembali'. OP menanyakan cara 'menonaktifkan' animasi, bukan 'memberi tahu aplikasi secara selektif untuk tidak memutarnya'
1owk3y
3
Jika Anda ingin menonaktifkan atau menimpa animasi "kembali" juga, ganti metode finish () dalam aktivitas Anda dan letakkan panggilan itu di sana bersama dengan panggilan ke super.finish (). Masalah terpecahkan.
Grishka
174

IMHO jawaban ini di sini menyelesaikan masalah dengan cara yang paling elegan ..

Pengembang harus membuat gaya ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

kemudian dalam manifes, tetapkan sebagai tema untuk aktivitas atau seluruh aplikasi.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Voila! Baik dan mudah..

Mohon kredit PS untuk penulis asli

Ewok
sumber
1
Ini tidak berfungsi untuk Back, dan itu mengubah tampilan bilah judul (membuatnya kecil) ...
Marek
apakah kamu yakin kamu tidak menambahkan beberapa properti lain dalam gaya, karena tidak ada orang lain yang melaporkan "efek" ini kamu sebutkan ..
Ewoks
Hanya untuk referensi, ini dapat menyebabkan masalah dalam hierarki tampilan saat Anda perlu requestWindowFeature ().
Martin Marconcini
Akan lebih baik jika Anda menjelaskan sedikit, jadi kami menghindari kemungkinan masalah
Ewoks
4
@ Marek Saya rasa masalah Anda tidak mengubah parent = "android: Theme" dengan benar. Anda harus mengubahnya dengan tema yang ingin Anda gunakan, pada dasarnya kode ini hanya menonaktifkan animasi tertentu dalam sebuah tema. misalnya, gunakan "Theme.AppCompat.Light.NoActionBar" alih-alih "android: Theme", dan Anda akan mengerti maksud saya. Saya harap ini membantu.
Recomer
35

Menerapkan

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

kemudian

overridePendingTransition(0, 0);

Ini akan menghentikan animasi.

Siddharth_Vyas
sumber
30

Menurut pendapat saya, jawaban terbaik adalah menggunakan "overridePendingTransition(0, 0);"

untuk menghindari melihat animasi bila Anda ingin Intentke Activitypenggunaan:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

dan untuk tidak melihat animasi saat Anda menekan tombol kembali onPauseMetode override dinewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Sasa
sumber
19

Cukup tentukan Intent.FLAG_ACTIVITY_NO_ANIMATIONbendera saat memulai

Alexander Kosenkov
sumber
13

Ini berfungsi untuk saya saat menonaktifkan animasi Aktivitas selesai.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
cmcromance.dll
sumber
9

Saya menggunakan 4.4.2, dan memanggil overridePendingTransition (0, 0) di onCreate () aktivitas peluncuran akan menonaktifkan animasi awal (memanggil overridePendingTransition (0, 0) segera setelah startActivity () TIDAK berfungsi). Seperti dicatat dalam jawaban lain, memanggil overridePendingTransition (0, 0) setelah finish () menonaktifkan animasi penutupan.

Ngomong-ngomong, saya menemukan bahwa menyetel gaya dengan "android: windowAnimationStyle"> @ null (jawaban lain yang disebutkan di sini) menyebabkan macet saat aktivitas peluncuran saya mencoba menyetel judul bilah tindakan. Debugging lebih lanjut, saya menemukan bahwa entah bagaimana ini menyebabkan window.hasFeature (Window.FEATURE_ACTION_BAR) gagal di initActionBar () Aktivitas.

Steve B
sumber
1
bagaimana dengan satu resume? aktivitas tunggal teratas dan semua itu.
Lassi Kinnunen
7

FLAG_ACTIVITY_NO_ANIMATION mungkin berhasil, tetapi tidak berhasil untuk saya jika digabungkan dengan FLAG_ACTIVITY_CLEAR_TASK dan FLAG_ACTIVITY_NEW_TASK. Sepertinya saya melihat animasi untuk membuat tugas baru dengan tumpukan aktivitas baru saat saya menavigasi secara lateral ke tampilan tingkat atas saya yang lain.

Apa yang berhasil di sini adalah memanggil "overridePendingTransition (0, 0);" baik segera setelah panggilan startActivity () saya atau onPause (). Kedua cara berhasil, tetapi melakukannya setelah startActivity () memberi saya sedikit lebih banyak kendali atas kapan saya menginginkan animasi dan kapan saya tidak.

Wookie
sumber
2

Saya memiliki masalah yang sama saat layar hitam muncul pada transisi geser dari satu aktivitas ke aktivitas lain menggunakan overridependingtransition. dan saya mengikuti cara di bawah ini dan berhasil

1) membuat noanim.xmldi folder anim

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

dan digunakan

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Parameter pertama sebagai animasi asli saya dan parameter kedua yaitu animasi keluar sebagai animasi dummy saya

Karthika PB
sumber
1

Untuk menghindari latar belakang hitam ketika memulai suatu kegiatan yang sudah di stack, saya menambahkan overridePendingTransition(0,0)di onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
Alex Huiculescu
sumber