2012-01-26 13 views
10

Korzystam z biblioteki pomocy Petera Doyle'a android-support-v4-googlemaps do realizacji działania, które wykorzystuje zarówno Fragmenty, jak i Mapy Google, i nie może sprawiać, że animacje FragmentTransaction zadziałają. Próbowałem użyć metody setCustomAnimations(int enter, int exit), jak również metody setTransition(int transit), ale bez skutku. Czy ktoś mógł włączyć animacje do pracy lub miał problemy z animacjami?Biblioteka pomocy: animacje FragmentTransaction nie działają

Niektóre animacje ja próbowałem:

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

Wierzyłem, że mam to działa na Galaxy S2, ale nie na innych. Wrócę, żeby cię o tym poinformować, kiedy jutro rano będę pracował. – RobGThai

+1

Sprawdź to pytanie. Przyjęta odpowiedź pomogła mi. http://stackoverflow.com/questions/7718111/android-fragment-standard-transition-noti-animating – Sababado

Odpowiedz

1

próbowałeś FragmentTransaction.remove() a następnie FragmentTransaction.add() zamiast FragmentTransaction.replace()? Widziałem w innych wątkach narzeka na to, że replace() nie działa zgodnie z oczekiwaniami.

I nie korzystał z biblioteki android-support-v4-googlemaps, ale mogę potwierdzić poniższy kod działa z 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

Dzięki za odpowiedź Andresa. Niestety nie mogłem uzyskać animacji do pracy (z wyjątkiem 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_OPEN)' i 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)' ale napotkałem inne problemy z tym) tak usunięto wywołania metody animacji/przejścia. –

+0

Korzystanie .add() jest lepszym rozwiązaniem niż użycie .replace(). Dobrym przykładem jest użycie .replace() w obsłudze v27.0.0 z setCustomAnimations, aplikacja po prostu zawiesza się po usunięciu fragmentu ze stosu. Dla mnie rozwiązaniem jest użycie .add(), ale transakcja w animacji jest tracona, ponieważ @AdilHussain powiedział – Pelanes

11

Należy zadzwonić FragmentTransaction. setCustomAnimations najpierw, a następnie zadzwoń pod numer FragmentTransaction. zastąpić metoda tak:

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

OMG !! Nie mogę uwierzyć, że jest tak głupi! zajęło mi godziny! –

0

spróbować zrobić migawkę mapie 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); 

} 

Make nowy fragment, które jedynie obraz mapy. Załaduj ten nowy fragment, zamień go, a następnie wykonaj przejście na fragmencie, który chcesz zastąpić: final SnapShotFragment snapFragment = 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(); 
Powiązane problemy