我对片段交易有一个非常烦人的情况。
在我的活动中,有一个片段必须与幻灯片放映动画一起出现:
public void showConnectedToWifiCard(String ssid) {
Bundle bundle = new Bundle();
bundle.putString("SSID", ssid);
ConnectedToWifiCardFragmentImpl fm = new ConnectedToWifiCardFragmentImpl();
fm.setArguments(bundle);
// Begin the transaction
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// Replace the contents of the container with the new fragment
//ft.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_anim);
//ft.hide(fm);
if (ft == null){
ft.add(R.id.main_small_card, fm);
}else{
ft.replace(R.id.main_small_card, fm);
}
ft.commit();
}
我认为Fragment Transaction会在动画之后立即创建片段(或替换),但结果是:
我试图设置不可见/可见的片段,但结果不会改变。
如何解决这个“眨眼”问题?
答案 0 :(得分:2)
为了在更换Fragment时制作动画,您可以使用以下代码:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//set customize animation here
fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out,
R.anim.slide_right_in, R.anim.slide_right_out);
ExampleFragment fragment = ExampleFragment.getInstance();
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
有关详细信息,请参阅我的博文: http://www.devexchanges.info/2015/05/replacing-fragment-and-adding-layouts.html 希望这有帮助! :d
答案 1 :(得分:0)
我宁愿将视图元素附加到片段,并且每次创建片段时都使用invalidate()而不是替换片段。或者你可以使用android DOC中引入的动画库。
答案 2 :(得分:0)
我记录了动画:
Slide_up.xml
<translate
android:fromXDelta="0"
android:fromYDelta="1000"
android:duration="1000"/>
slide_down.xml
<translate
android:fromXDelta="0"
android:fromYDelta="-1000"
android:duration="1500"/>