支持库:FragmentTransaction动画无效

11

我正在使用Peter Doyle的android-support-v4-googlemaps支持库来实现一个同时使用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)

1
我相信我已经在Galaxy S2上使它工作了,但其他设备上没有。明天早上到工作时,我会回来更新你的。 - RobGThai
1
看看这个问题。被接受的答案帮了我一个大忙。https://dev59.com/eWsz5IYBdhLWcg3wsaHN - Sababado
3个回答

13

您应该首先调用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);

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();

谢谢您的回复,Andres。不幸的是,我无法使动画工作(除了setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)之外,但在此过程中遇到了其他问题),因此删除了动画/转换方法调用。 - Adil Hussain
使用 .add() 比使用 .replace() 更好。一个很好的例子是在支持 v27.0.0 中使用 .replace() 与 setCustomAnimations,当从堆栈中移除 fragment 时,应用程序会崩溃。对我来说,解决方案是使用 .add(),但是像 @AdilHussain 所说的那样,动画中的事务会丢失。 - Pelanes

0

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

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 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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接