2012-01-26 160 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();