【发布时间】:2015-10-16 03:21:22
【问题描述】:
我在使用fragmentTransaction.setCustomAnimations(R.animator.slide_in_down, R.animator.slide_out_down)时遇到了一些问题,当我希望两个片段顺利滑下时,in-fragment在out-fragment完成slide_out_down的动画师之后立即出现,当我更换动画师时希望两个片段平滑向上滑动,in-fragment 在out-fragment 开始动画之前立即消失。
为什么?如何解决?
还有更多细节。
我有一个列表视图,屏幕左侧有三个项目,右侧有三个片段,一个片段一个项目。
样样
在MyActivity 中,我初始化onCreate() 中的所有片段
private void createFragment(int initPosition) {
mFragment[0] = new Fragment();
mFragment[1] = new Fragment();
mFragment[2] = new Fragment();
mFragmentManager = getFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.add(R.id.content_layout, mFragment[initPosition]);
mFragmentTransaction.commit();
}
我为列表视图设置了一个onItemSelectedListener,当列表视图更改它的选择时,称为replaceFragment(int fromPos, int toPos)。
private void replaceFragment(int fromPos, int toPos) {
if(fromPos != toPos) {
mFragmentTransactoin = mFragmentManager.beginTransaction();
//add animator
if (fromPos < toPos) {
mFragmentTransaction.setCustomAnimations(R.animator.slide_in_up, R.animator.slide_out_up);
} else {
mFragmentTransaction.setCustomAnimations(R.animator.slide_in_down, R.animator.slide_out_down);
}
if (!mFragments[toPos].isAdded()) {
mFragmentTransaction.add(R.id.content_layout, mFragments[toPos]);
}
mFragmentTransaction.show(mFragments[toPos]);
mFragmentTransaction.hide(mFragments[toPos]);
mFragmentTransaction.commit();
}
}
为什么不使用replace(),因为replace()导致out-fragment被破坏,in-fragment每次都会初始化。这很糟糕。show() 和 hide() 可以避免这种情况。
动画师代码:
slide_in_up.xml
<objectAnimator
android:valueFrom="1280"
android:valueTo="0"
android:propertyName="translationY"
android:duration="800"/>
slide_out_up.xml
<objectAnimator
android:valueFrom="0"
android:valueTo="-1280"
android:propertyName="translationY"
android:duration="800"/>
slide_in_down.xml
<objectAnimator
android:valueFrom="-1280"
android:valueTo="0"
android:propertyName="translationY"
android:duration="800"/>
slide_out_down.xml
<objectAnimator
android:valueFrom="0"
android:valueTo="1280"
android:propertyName="translationY"
android:duration="800"/>
感谢任何回复。
【问题讨论】:
标签: android animation transactions fragment