2012-01-26 94 views
10

我使用Peter Doyle的android-support-v4-googlemaps支持库来实现同时使用Fragments和Google Maps的Activity,并且似乎无法使FragmentTransaction动画正常工作。我试过使用setCustomAnimations(int enter, int exit)方法以及setTransition(int transit)方法,但无济于事。任何人都可以使动画起作用,或者在动画工作方面也遇到问题?支持库:FragmentTransaction动画不起作用

一些我试过动画:

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) 
+1

我相信我有它在Galaxy S2上工作,但不是其他人。明天早上我上班时,我会回来向您介绍这方面的情况。 – RobGThai

+1

检查这个问题了。接受的答案帮助了我。 http://stackoverflow.com/questions/7718111/android-fragment-standard-transition-not-animating – Sababado

回答

1

你试过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(); 
+0

谢谢你的回应Andres。不幸的是,我无法使动画工作(除了'setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)'和'setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)',但遇到了其他问题),所以删除了动画/转换方法调用。 –

+0

使用.add()比使用.replace()更好。一个很好的例子是在支持v27.0.0中使用.replace()和setCustomAnimations,当从堆栈中删除片段时,应用程序崩溃。对我来说,解决方案是使用.add(),但动画中的事务失败,因为@AdilHussain表示 – Pelanes

11

你应该叫FragmentTransaction。 setCustomAnimations先拨电话 FragmentTransaction。 更换方法是这样的:

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

OMG!我不相信它太愚蠢!花了我几个小时! –

0

尽量让你的谷歌地图的快照:

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 = 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();