支持库:FragmentTransactionanimation无效

我使用Peter Doyle的android-support-v4-googlemaps支持库来实现一个使用Fragments和Google Maps的Activity,而且似乎无法使FragmentTransactionanimation工作。 我试过使用setCustomAnimations(int enter, int exit)方法以及setTransition(int transit)方法,但无济于事。 任何人都可以得到animation工作,或者也有animation工作的问题?

我尝试过的一些animation:

 setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right) 

Related of "支持库:FragmentTransactionanimation无效"

你应该调用FragmentTransaction。 先setCustomAnimations ,然后调用FragmentTransaction。 replace这样的方法:

  FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.fade_out,R.anim.fade_in); ft.replace(R.id.fragmentDetails, detailsFrag); 

你有没有尝试FragmentTransaction.remove() ,然后FragmentTransaction.add() ,而不是FragmentTransaction.replace() ? 我见过其他线程抱怨replace()没有按预期工作。

我没有使用android-support-v4-googlemaps库,但我可以确认下面的代码与android-support-v4.jar

 FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); tx.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); tx.replace(R.id.fragment_container, new Fragment2()); tx.addToBackStack(null); tx.commit(); 

尝试制作一份Google地图的快照:

 private void snapShot() { SnapshotReadyCallback callback = new SnapshotReadyCallback() { Bitmap bitmap; @Override public void onSnapshotReady(Bitmap snapshot) { // TODO Auto-generated method stub bitmap = snapshot; try { FileOutputStream out = new FileOutputStream(getActivity() .getFilesDir() + "/MapSnapshot.png"); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); } catch (Exception e) { e.printStackTrace(); } } }; map.snapshot(callback); } 

创build一个只有地图图片的新片段。 使用replace加载这个新的片段,然后在你想要replace的片段上进行转换:final SnapShotFragment snapFrag = new SnapShotFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction();

  transaction.replace(MapFragment.this.getId(), snapFrag); transaction.addToBackStack(null); transaction.commit(); getFragmentManager().executePendingTransactions(); final boolean roi = isInROI; WayPointDetailActivity waypointFrag = new WayPointDetailActivity(); waypointFrag.setWayPointId(wp.getId()); waypointFrag.setInRoi(roi); transaction = getFragmentManager() .beginTransaction(); transaction.setCustomAnimations(R.anim.enter, R.anim.exit); transaction.replace(snapFrag.getId(), waypointFrag); transaction.addToBackStack(null); transaction.commit();