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.


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


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);

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));

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.


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!


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>

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>

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.