我正在实现片段转换动画。
我的exit
动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<objectAnimator
android:propertyName="scaleX"
android:valueType="floatType"
android:valueFrom="1.0"
android:valueTo="0.95"
android:duration="300"/>
<objectAnimator
android:propertyName="scaleY"
android:valueType="floatType"
android:valueFrom="1.0"
android:valueTo="0.95"
android:duration="300"/>
<objectAnimator
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="10dp"
android:duration="300"/>
</set>
enter
动画是:
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="1280"
android:valueTo="0"
android:duration="400"/>
交易是这样创建的:
fragmentManager.beginTransaction()
.setCustomAnimations(enter, exit, popEnter, popExit)
.replace(CONTENT_CONTAINER_ID, newFragment)
.addToBackStack(null)
.commit();
在正常的动画速度下,由于动画持续时间较短,不需要的效果几乎不可见,但是当你放慢速度时,你可以清楚地看到,z-order
是错误的。
输入片段动画在退出片段动画下方。有解决办法吗?
答案 0 :(得分:4)
我认为您可以尝试以下方法作为解决方法。
fragmentTr.setCustomAnimations(enter, exit);
fragmentTr.hide(currentFragment);
fragmentTr.add(containerId, newFragment, "aTag");
fragmentTr.show(newFragment);
fragmentTr.commit();
不要使用replace()。我尝试了上述方法,并且有效。 希望这会有所帮助。
答案 1 :(得分:2)
这可能已经过时了,但我遇到了同样的问题。我通过在XML中定义两个内容区域来解决它,例如:
<FrameLayout>
<FrameLayout id="@+id/oldFragment" />
<FrameLayout id="@+id/newFragment" />
</FrameLayout>
我会将第一个片段加载到oldFragment
,我的交易看起来像这样:
getActivity().getSupportFragmentManager()
.beginTransaction()
.remove(old_frag)
.add(R.id.newFragment, new_frag)
.addToBackStack(null)
.commit();
希望有所帮助。
答案 2 :(得分:0)
我知道它太旧了,但是android jetpack也有同样的问题。
此答案适用于android jetpack和导航图
在navigation.xml中设置动画
<fragment
android:id="@+id/specifyAmountFragment"
android:name="com.example.buybuddy.buybuddy.SpecifyAmountFragment"
android:label="fragment_specify_amount"
tools:layout="@layout/fragment_specify_amount">
<action
android:id="@+id/confirmationAction"
app:destination="@id/confirmationFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
添加动画资源
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0" ndroid:duration="200"/>
</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="200"/>
</set>
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="200"/>
</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="200"/>
</set>
Other useful answer More details at android developer docs
其他示例动画:
答案 3 :(得分:-1)
对我来说,将此行添加到动画
split