Android 支持库:碎片事务动画不工作

Android 支持库:碎片事务动画不工作,android,android-fragments,android-animation,android-maps,Android,Android Fragments,Android Animation,Android Maps,我正在使用Peter Doyle的支持库来实现一个同时使用片段和Google地图的活动,但似乎无法让FragmentTransaction动画正常工作。我尝试过使用setCustomAnimations(int-enter,int-exit)方法以及setTransition(int-transition)方法,但都没有用。有人能够让动画工作,或者在让动画工作时遇到问题吗 我尝试过的一些动画: setTransition(FragmentTransaction.TRANSIT_FRAGMENT_

我正在使用Peter Doyle的支持库来实现一个同时使用片段和Google地图的活动,但似乎无法让FragmentTransaction动画正常工作。我尝试过使用
setCustomAnimations(int-enter,int-exit)
方法以及
setTransition(int-transition)
方法,但都没有用。有人能够让动画工作,或者在让动画工作时遇到问题吗

我尝试过的一些动画:

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)
你有没有试过,然后,而不是?我在其他线程中看到过关于
replace()
无法按预期工作的抱怨

我没有使用该库,但我可以确认下面的代码可以与
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();
您应该先调用FragmentTransaction。setCustomAnimations,然后调用 FragmentTransaction.替换如下方法:

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

尝试为您的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);

}
他们制作了一个只有地图图片的新片段。用replace加载此新片段,然后对要替换的片段进行转换: 最终SnapShotFragment snapFrag=新SnapShotFragment(); FragmentTransaction事务=getFragmentManager() .beginTransaction()


我相信我让它在星系S2上工作,但其他的都没有。我明天早上上班时会回来告诉你最新情况。看看这个问题。被接受的答案帮助了我。谢谢你的回复,安德烈斯。不幸的是,我无法让动画正常工作(除了
setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN)
setTransition(FragmentTransaction.transition\u FRAGMENT\u CLOSE)
,但遇到了其他问题),因此删除了动画/转换方法调用。使用.add()是比使用.replace()更好的解决方案。一个很好的例子是在支持v27.0.0的setCustomAnimations中使用.replace(),当片段从堆栈中删除时,应用程序就会崩溃。对我来说,解决方案是使用.add(),但正如@AdilHussain所说,动画中的事务丢失了
                        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();