Saya mencoba menghidupkan transisi antara fragmen. Saya mendapat jawaban dari Fragmen dan animasi Android berikut
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Dan R.anim.slide_in_left saya
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
Tetapi ketika saya mencoba ini itu menunjukkan
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): FATAL EXCEPTION: main
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): java.lang.RuntimeException: Unknown animator name: translate
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:129)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.loadAnimator(FragmentManager.java:621)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:733)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.BackStackRecord.run(BackStackRecord.java:578)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1217)
Ada ide? Ketika saya memeriksa referensi Honeycomb API translate
ada di sana. Apa yang saya lewatkan?
Apakah ada cara lain untuk menghidupkan transisi antara fragmen? Terima kasih
android
android-3.0-honeycomb
Labeeb Panampullan
sumber
sumber
Jawaban:
Anda perlu menggunakan baru
android.animation
kerangka kerja (objek animator) denganFragmentTransaction.setCustomAnimations
sertaFragmentTransaction.setTransition
.Berikut ini contoh penggunaan
setCustomAnimations
dari ApiDemos ' FragmentHideShow.java :dan inilah animator XML yang relevan dari res / animator / fade_in.xml :
Perhatikan bahwa Anda dapat menggabungkan beberapa animator menggunakan
<set>
, seperti yang Anda bisa dengan kerangka animasi yang lebih lama.EDIT : Karena orang-orang bertanya tentang slide-in / slide-out, saya akan berkomentar di sini.
Slide-in dan slide-out
Anda tentu saja dapat menghidupkan
translationX
,translationY
,x
, dany
properti, tetapi umumnya slide melibatkan menghidupkan konten ke dan dari luar layar. Sejauh yang saya tahu tidak ada properti transisi yang menggunakan nilai relatif. Namun, ini tidak menghalangi Anda untuk menulisnya sendiri. Ingat bahwa animasi properti hanya membutuhkan metode pengambil dan penyetel pada objek yang Anda animasikan (dalam tampilan kasus ini), jadi Anda bisa membuatnya sendirigetXFraction
dansetXFraction
metode pada subkelas tampilan Anda, seperti ini:Sekarang Anda dapat menghidupkan properti 'xFraction', seperti ini:
res / animator / slide_in.xml :
Perhatikan bahwa jika objek yang Anda animasikan tidak memiliki lebar yang sama dengan induknya, segalanya tidak akan terlihat benar, jadi Anda mungkin perlu mengubah implementasi properti Anda agar sesuai dengan use case Anda.
sumber
Saya telah melakukan ini:
Tambahkan metode ini untuk mengganti fragmen dengan Animasi :
Anda harus menambahkan empat animasi di folder anim yang dikaitkan dengan sumber daya :
enter_from_left.xml :
exit_to_right.xml :
enter_from_right.xml :
exit_to_left.xml :
Keluaran:
Selesai .
sumber
.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right)
Jika Anda mampu mengikat diri hanya dengan Lollipop dan yang lebih baru, ini sepertinya bisa dilakukan:
Semoga ini membantu.
sumber
new Slide(...)
: panggilan membutuhkan API level 21Jawaban Nurik sangat membantu, tetapi saya tidak bisa bekerja sampai saya menemukan ini . Singkatnya, jika Anda menggunakan pustaka kompatibilitas (mis. SupportFragmentManager alih-alih FragmentManager), sintaksis file animasi XML akan berbeda.
sumber
Berikut ini animasi slide masuk / keluar antara fragmen:
Kami menggunakan objectAnimator.
Berikut adalah dua file xml dalam subfolder animator .
enter_anim.xml
exit_anim.xml
Saya harap itu akan membantu seseorang.
sumber
.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right, R.animator.slide_in_left, R.animator.slide_out_right)
Bagi siapa pun yang ketahuan, pastikan setCustomAnimations dipanggil sebelum panggilan untuk mengganti / menambah saat membangun transaksi.
sumber
Implementasi Android SDK dari FragmentTransaction
Animator
membutuhkan perpustakaan dukungan sementara menginginkanAnimation
, jangan tanya mengapa, tetapi setelah komentar strangeluk saya melihat ke kode android 4.0.3 dan perpustakaan dukungan. Android SDK menggunakanloadAnimator()
dan mendukung penggunaan perpustakaanloadAnimation()
sumber
Coba gunakan solusi sederhana dan cepat ini. Android menyediakan beberapa default
animation
.Keluaran:
sumber