Библиотека поддержки: анимации FragmentTransaction не работают

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

Ответ 1

Сначала вы должны вызвать FragmentTransaction. setCustomAnimations, а затем вызвать FragmentTransaction. заменить следующим образом:

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

Ответ 2

Вы пробовали 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();

Ответ 3

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