Bagaimana cara mengganti aktivitas tanpa animasi di Android?

165

Bagaimana saya bisa menggunakan bendera Intent FLAG_ACTIVITY_NO_ANIMATIONdi file AndroidManifest dengan benar? Saya kira masalah saya sepele, tetapi saya tidak dapat menemukan contoh atau solusi yang baik untuk itu.

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

Namun tidak ada kesalahan yang dilaporkan oleh compliator, tetapi datatidak benar. Saya hanya ingin menonaktifkan animasi jika berpindah antar kegiatan. Saya bisa menggunakannya getWindow().setWindowAnimations(0);di onCreate atau onResume, tetapi menggunakan flag adalah cara yang lebih baik, bukan?

Saya dapat menggunakan juga dalam kode:

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

Tapi saya ingin menggunakan bendera ini di Android Manifest. Untuk menonaktifkan animasi juga jika kembali dari aktivitas kedua ke yang pertama.

woyaru
sumber
Saya telah menemukan saran untuk menggunakan tema - dengan mendefinisikan enter, keluar dari animasi untuk aktivitas atau seluruh aplikasi. Dapatkah seseorang memberi saya lebih banyak informasi tentang itu?
woyaru

Jawaban:

269

Anda dapat membuat gaya,

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

dan tetapkan sebagai tema untuk aktivitas Anda di manifes:

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

Anda juga dapat menentukan gaya untuk menentukan entri khusus dan keluar dari animasi. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation

Santosh
sumber
Terima kasih, ini bekerja sangat baik terutama untuk kegiatan bertema transparan / dialog dikecualikan dari saat ini dengan afinitas tugas yang berbeda. Tanpa ini animasi terus ditampilkan menciptakan hasil yang sangat aneh untuk dialog yang dibuka!
3c71
ini sepertinya tidak lagi berfungsi untuk Lollipop / Android 5.0?
kenyee
Saya memiliki Android 5 dan berfungsi untuk saya. Gaya aplikasi saya terlihat seperti ini: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android: windowAnimationStyle"> @ null </item> </style>
eatyourgreens
Berfungsi dengan sempurna di 6.0 juga. Tip yang bagus. Seperti yang saya tanyakan di bawah ini, saya bertanya-tanya bagaimana cara menonaktifkan animasi yang terjadi ketika * pertama kali meluncurkan aplikasi ... apakah ada caranya ?!
Fattie
5
akan macet jika Anda memperpanjang AppCompatActivity
Mike6679
191

Jika konteks Anda adalah aktivitas, Anda dapat memanggil overridePendingTransition :

Panggil segera setelah salah satu rasa startActivity (Intent) atau selesai untuk menentukan animasi transisi eksplisit untuk melakukan selanjutnya.

Jadi, secara pemrograman:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
eshirazi
sumber
apakah mungkin untuk melakukannya melalui adb juga?
pengembang android
@ Talalngel overridePendingTransitiontelah ditambahkan di API level 5. Jadi tidak itu tidak bekerja pada "setiap" versi Android tapi saya kira Anda menargetkan level API yang lebih tinggi maka 5.
Bruno Bieri
43

Coba kode ini,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
Bartłomiej Jończy
sumber
1
Ini sangat membantu ketika memulai aktivitas dari layanan.
DearDhruv
24

Anda juga dapat melakukan ini di semua kegiatan yang tidak ingin Anda transisikan dari:

@Override
public void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

Saya suka pendekatan ini karena Anda tidak perlu mengacaukan gaya aktivitas Anda.


sumber
Tip yang bagus. Saya bertanya-tanya bagaimana cara menonaktifkan animasi yang terjadi ketika * pertama meluncurkan aplikasi ... apakah ada cara ?!
Fattie
@ Fat timpa metode onStart () dari aktivitas peluncuran Anda dan tempatkan kode yang sama di dalamnya.
Jawad Adil
4

Berikut ini adalah solusi satu-liner yang berfungsi serendah minSdkVersion 14yang harus Anda masukkan res/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

seperti itu:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

Bersulang!

pengguna1506104
sumber
3

Garis dalam gaya tema berfungsi dengan baik, namun itu menggantikan animasi dengan layar putih. Terutama pada ponsel yang lebih lambat - ini benar-benar menjengkelkan. Jadi, jika Anda ingin transisi instan - Anda bisa menggunakan ini dalam gaya tema:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
Vladimir Demirev
sumber
2

buat gaya Anda sendiri menimpa Android: Tema

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

Kemudian gunakan dalam manifes seperti ini:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>
goyo
sumber
0

Setelah mulai niat, Anda dapat menggunakan kode ini:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

Jika digunakan, niat tidak akan berfungsi tanpa animasi atau transisi

Faran
sumber