我正在使用Peter Doyle的android-support-v4-googlemaps支持库来实现一个同时使用Fragments和Google Maps的活动,但似乎无法使FragmentTransaction动画工作。我尝试过使用setCustomAnimations(int enter, int exit)
方法和setTransition(int transit)
方法,但都没有用。有人能够让动画工作,或者在让动画工作时遇到问题吗?
我尝试过的一些动画:
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)
您应该调用FragmentTransaction先设置CustomAnimations,然后调用FragmentTransaction替换方法如下:
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();
尝试制作谷歌地图的快照:
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);
}
制作一个只有地图图片的新片段。用replace加载这个新片段,然后在要替换的片段上进行转换:final SnapShotFragment snapFrag=新SnapshotFraction();FragmentTransaction事务=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();