지원 패키지 v4와 함께 Google API 8 (Android 2.2)을 사용하고 있습니다.
오류나 애니메이션을 제공하지 않습니다.
트랜잭션:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
애니메이션 :
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="700"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="700"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
여기서 무슨 일이 일어나고 있는지 아는 사람이 있습니까?
답변
관리자는 애니메이션을 설정하기 전에 내 트랜잭션을 쌓았 기 때문에 애니메이션없이 트랜잭션을 쌓습니다 (슬프지만 사실) setCustomAnimations()
.
해결책은 먼저 애니메이션을 설정하는 것입니다.
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
답변
위에서 제안한 것처럼 별도의 진술이 확실히 작동합니다. 그러나 여기서 트릭 은 setCustomAnimation
트랜잭션 유형 즉, 설정 하기 전에하는 것입니다. add
, replace
등. 그렇지 않으면 그렇지 않습니다. 따라서 동일한 논리를 적용하는 method chaining
것도 작동합니다. 예.
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.a_slide_up,
R.anim.a_slide_down,
R.anim.a_slide_up,
R.anim.a_slide_down)
.add(R.id.root_layout,
MyFrag.newInstance())
.addToBackStack("MyFrag")
.commit();
선호하는 사람 method chaining
이 도움이 될 수 있도록 여기에 두십시오. 건배!
답변
가장 인기있는 질문이므로 여기에 남겨 두세요. 단편 트랜잭션이 애니메이션되지 않는 것과 동일한 문제가 발생했습니다. 범인은 포함하는 레이아웃에서 속성을로 android:animateLayoutChanges
설정했습니다 true
.
다른 파일에 중첩 된 레이아웃이있을 때 눈에 띄기 어려울 수 있으므로 누군가가 솔루션을 찾는 데 시간을 절약하는 데 도움이되기를 바랍니다.
답변
또 다른 이유는 fragmentTransaction.show()
커밋 전에 불필요하게 배치 할 수 있습니다 . 이로 인해 일부 Android API 버전에서는 팝 전환이 표시되지 않습니다.