10

Я использую библиотеку поддержки Peter Doyle android-support-v4-googlemaps для реализации Activity, которая использует как фрагменты, так и Карты Google, и, похоже, не может заставить анимацию 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

Спасибо за ответ Андрес. К сожалению, я не мог заставить анимацию работать (за исключением 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_OPEN)' и 'setTransition (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)', но столкнулся с другими проблемами с этим), поэтому удалили вызовы метода анимации/перехода. –

+0

Использование .add() - лучшее решение, чем использование .replace(). Хорошим примером является использование .replace() в поддержке v27.0.0 с помощью 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

Попробуйте сделать снимок вашей карты 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); 

} 

Внести новый фрагмент, который есть только изображение карты. Загрузите этот новый фрагмент с заменой, а затем выполните переход на фрагмент, который вы хотите заменить: 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(); 
Смежные вопросы