Dapatkah saya mengubah animasi transisi startActivity () Android?


Jawaban:


33

Dalam pernyataan yang sama di mana Anda menjalankan finish (), jalankan animasi Anda di sana juga. Kemudian, di aktivitas baru, jalankan animasi lain. Lihat kode ini:

fadein.xml

<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"/> //Time in milliseconds
</set>

Di kelas akhir Anda

private void finishTask() {
    if("blabbla".equals("blablabla"){
        finish();
        runFadeInAnimation();
    }
}

private void runFadeInAnimation() {
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
    a.reset();
    LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
    ll.clearAnimation();
    ll.startAnimation(a);   
}

fadeout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
           android:fillAfter="true">
  <alpha android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="500"/>
</set>

Di kelas Activity baru Anda, Anda membuat metode serupa seperti runFadeAnimation yang saya tulis dan kemudian Anda menjalankannya di onCreate dan jangan lupa untuk mengubah id sumber daya menjadi fadeout.


1
Selain itu, mungkin lebih baik menggunakan waktu animasi pendek default:android:duration="@android:integer/config_shortAnimTime"
elimirks

dimanarunFadeAnimation()
Choletski

2
Guys, pastikan untuk melihat jawaban sebenarnya di bawah posting ini.
Pengembang Android

apa blabbla ?? !!
Ali Khaki

288

Mulai dari API level 5, Anda bisa segera memanggil overridePendingTransition untuk menentukan animasi transisi eksplisit:

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

atau

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

17
Tambahkan sesuatu seperti: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } untuk menambahkan kembali animasi.
RightHandedMonkey

1
Ini harus menjadi jawaban bersih terbaik.
cy198706

1
@RightHandedMonkey Untuk menambahkan kembali animasi lebih baik menimpa finish (); metode aktivitas untuk kasus di mana aktivitas diakhiri dengan sesuatu selain tombol kembali (mis. tombol keluar kustom ...).
Itiel Maimon

43

Lihat tema di android: http://developer.android.com/guide/topics/ui/themes.html .

Di bawah themes.xml seharusnya ada android:windowAnimationStyletempat Anda bisa melihat deklarasi gaya di styles.xml .

Contoh implementasi:

<style name="AppTheme" parent="...">

    ...

    <item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>

</style>

<style name="WindowAnimationStyle">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>



3
Solusi terbaik .
Abhishek kumar

Bagaimana Anda mengakses @android:anim/fade_indari kode java?
Tamoxin

17

Menggunakan overridePendingTransition

startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);

fadein.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
</set>

fadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/anticipate_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

9

Untuk fadeIn dan fadeOut , hanya menambah ini setelah super.onCreate (savedInstanceState) di kelas Activity baru Anda. Anda tidak perlu membuat yang lain (Tanpa XML, tanpa folder anim, tanpa fungsi tambahan).

overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z

9

Jika Anda selalu ingin animasi transisi yang sama untuk aktivitas tersebut

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}

4

Anda cukup membuat konteks dan melakukan sesuatu seperti di bawah ini: -

private Context context = this;

Dan animasi Anda: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

Anda dapat menggunakan animasi apa pun yang Anda inginkan.


1

Saya ingin menggunakan solusi styles.xml, tetapi solusi itu tidak berhasil untuk saya dengan aktivitas. Ternyata alih-alih menggunakan android:windowEnterAnimationdan android:windowExitAnimation, saya perlu menggunakan animasi aktivitas seperti ini:

<style name="ActivityAnimation.Vertical" parent="">
    <item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>

0
 // CREATE anim 

 // CREATE animation,animation2  xml // animation like fade out 

  Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
  Bundle bndlanimation1 =  ActivityOptions.makeCustomAnimation(getApplicationContext(), 
  R.anim.animation, R.anim.animation2).toBundle();
  tartActivity(myIntent1, bndlanimation1);

0

Sebagian besar jawaban cukup benar, tetapi beberapa di antaranya sudah usang seperti saat menggunakan R.anim.hold dan beberapa di antaranya hanya menjelaskan prosesnya.

Jadi, Anda bisa menggunakan:

startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
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.