Jawaban:
Anda dapat melakukannya dengan Activity.overridePendingTransition()
. Anda dapat menentukan animasi transisi sederhana dalam file sumber daya XML.
onCreate
fungsi Aktivitas Anda .
Berikut kode untuk melakukan pemudaran halus yang bagus antara dua Kegiatan ..
Buat file bernama fadein.xml
dires/anim
<?xml version="1.0" encoding="utf-8"?>
<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="2000" />
Buat file bernama fadeout.xml
dires/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
Jika Anda ingin memudar dari Aktivitas A ke Kegiatan B , menempatkan berikut dalam onCreate()
metode untuk Kegiatan B . Sebelum setContentView()
bekerja untuk saya.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Jika fade terlalu lambat untuk Anda, ubah android:duration
file xml di atas menjadi sesuatu yang lebih kecil.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
Melihat file-file itu juga dapat memberi Anda petunjuk tentang cara meningkatkan animasi kustom Anda (misalnya dengan membuat fade lebih lama daripada fade out).
fadein
dan fadeout
ke fade_in
dan fade_out
. Dari pos Dan J
overridePendingTransition()
segera setelah menelepon finish()
dan / atau startActivity()
. Saya dapat memudar dengan cara ini dengan memanggilnya tepat setelah meluncurkan Aktivitas baru.
Cara yang bahkan mudah untuk melakukannya adalah:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
Itu dia :)
Iya. Anda dapat memberi tahu OS transisi seperti apa yang Anda inginkan untuk aktivitas Anda.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Di mana ANIMATION adalah bilangan bulat yang mengacu pada animasi bawaan di OS.
buat res> anim> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<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" />
buat res> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
Dalam res> values> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
Dalam aktivitas onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Untuk daftar animasi default, lihat: http://developer.android.com/reference/android/R.anim.html
Sebenarnya ada fade_in
dan fade_out
untuk API level 1 ke atas.
Saya menimpa animasi aktivitas default saya. Saya mengujinya di api 15 agar bekerja dengan lancar. Inilah solusi yang saya gunakan:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Buat folder anim di bawah folder res dan kemudian buat empat file animasi ini:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Anda dapat mengunduh proyek sampel saya .
Itu saja... :)
Berikut kode untuk melakukan kelancaran yang bagus di antara dua aktivitas.
efek halus dari kiri ke kanan
Buat file bernama slide_in_right.xml dan slide_out_right.xml di res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
efek halus dari kanan ke kiri
Buat file bernama animation_enter.xml dan animation_leave.xml di res / anim
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700"/>
</set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
Menavigasi dari satu aktivitas ke Aktivitas kedua
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4.Pada kembali acara tekan atau Navigasi dari aktivitas kedua ke satu Kegiatan
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
segera setelah startActivity: developer.android.com/reference/android/app/…
Anda tidak dapat menggunakan overridePendingTransition di Android 1.5. overridePendingTransistion datang ke Android 2.0.
Jika Anda akan melalui ini tanpa kesalahan Anda harus mengkompilasi untuk target (1,5 atau lebih tinggi) menggunakan animasi biasa (atau Anda sendiri) atau Anda harus mengkompilasi untuk target (2,0 atau lebih tinggi) menggunakan overridePendingTransistion.
Ringkasan: Anda tidak dapat menggunakan overridePendingTransistion di Android 1.5 .
Anda dapat menggunakan animasi bawaan di OS.
DALAM GALAXY Perangkat:
Anda perlu memastikan bahwa Anda tidak mematikannya di perangkat menggunakan Pengaturan> Opsi Pengembang:
Gunakan ActivityCompat.startActivity () berfungsi API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Beberapa versi Android mendukung Activity
transisi khusus dan beberapa tidak (perangkat yang lebih lama). Jika Anda ingin menggunakan transisi khusus, praktik yang baik untuk memeriksa apakah Activity
memiliki overridePendingTransition()
metode, seperti pada versi yang lebih lama tidak.
Untuk mengetahui apakah metode itu ada atau tidak, API refleksi dapat digunakan. Berikut adalah kode sederhana yang akan memeriksa dan mengembalikan metode jika ada:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
Dan kemudian, kita dapat menerapkan transisi kita sendiri, yaitu menggunakan metode ini jika ada:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Di sini, sebagai contoh, animasi fade-in dan fade-out sederhana digunakan untuk demonstrasi transisi ..
memperbesar animasi
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<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" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
jawaban terkait di bawah ini: Anda dapat lulus(0, 0)
jika Anda tidak menginginkan animasi sama sekali.