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.

Tirai
sumber
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);
Allen Chan
sumber
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>
monmonja
sumber
1
maxters.net/2011/05/…
Dawid Drozd
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>
Mohsen mokhtari
sumber
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);
Cedriga
sumber
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);
    }
}
Farid Z
sumber
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.

Julfikar
sumber
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>
Daniel Zolnai
sumber
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);
Ashif
sumber
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);
RAWNAK YAZDANI
sumber