问题 支持库:FragmentTransaction动画不起作用


我正在使用Peter Doyle的 Android的支持-V4-谷歌地图 支持库,用于实现同时使用Fragments和Google Maps的Activity,并且似乎无法使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)

12437
2018-01-26 10:33


起源

我相信我让它在Galaxy S2上工作但不在其他工作。我明天早上上班的时候会回来给你更新。 - RobGThai
检查这个问题。接受的答案对我有帮助。 stackoverflow.com/questions/7718111/... - Sababado


答案:


你应该打电话 FragmentTransaction。setCustomAnimations


12
2017-09-22 16:53



我的天啊!!我不敢相信它是如此愚蠢!我花了几个小时! - Gil SH


你有没有尝试过 FragmentTransaction.remove() 接着 FragmentTransaction.add(), 代替 FragmentTransaction.replace()?我在其他线程中看到过抱怨 replace() 没有按预期工作。

我还没用过 Android的支持-V4-谷歌地图 库,但我可以确认下面的代码适用 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();

1
2018-05-29 16:42



感谢Andres的回应。不幸的是我无法让动画工作(除了 setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 和 setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) 但是遇到了其他问题)所以删除了动画/转换方法调用。 - Adil Hussain
使用.add()是比使用.replace()更好的解决方案。一个很好的例子是使用setCustomAnimations在支持v27.0.0中使用.replace(),当从堆栈中删除片段时,app会崩溃。对我来说,解决方案是使用.add(),但动画中的事务将丢失,因为@AdilHussain说 - Pelanes


尝试制作谷歌地图的快照:

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加载此新片段,然后对要替换的片段进行转换:     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();

0
2018-06-12 17:27