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

Я использую библиотеку поддержки android-support-v4-googlemaps Питера Дойла для реализации действие, которое использует как фрагменты, так и карты 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)

person Adil Hussain    schedule 26.01.2012    source источник
comment
Я считал, что у меня это работает на Galaxy S2, но не на других. Я вернусь, чтобы сообщить вам об этом, когда я приду на работу завтра утром.   -  person RobGThai    schedule 29.05.2012
comment
Проверьте этот вопрос. Принятый ответ помог мне. stackoverflow.com/questions/7718111/   -  person Sababado    schedule 27.07.2012


Ответы (3)


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

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

Пробовали ли вы 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();
person Andrés Pachon    schedule 29.05.2012
comment
Спасибо за ответ Андрес. К сожалению, я не смог заставить работать анимацию (кроме setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) и setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE), но столкнулся с другими проблемами с этим), поэтому удалил вызовы методов анимации/перехода. - person Adil Hussain; 30.05.2012
comment
Использование .add() является лучшим решением, чем использование .replace(). Хорошим примером является использование .replace() в поддержке v27.0.0 с setCustomAnimations, приложение просто падает, когда фрагмент удаляется из стека. Для меня решение состоит в том, чтобы использовать .add(), но транзакция в анимации теряется, как сказал @AdilHussain - person Pelanes; 09.02.2018

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