删除和动画结束后片段闪烁

时间:2015-02-26 15:18:56

标签: android android-fragments android-animation material-design

我一直试图通过循环显示动画来插入一个片段并从我的活动中删除。我发现这个演示回购here就是这样做的。我做的唯一改变是在点击按钮时删除片段,而不是片段触及的监听器。

问题是,在使用按钮删除后,当动画结束时,我看到片段闪烁了一秒钟。如果我使用onTouch监听器删除片段,则不会发生闪存:YouTube link

一些观察:
- 如果我在移动设备上运行代码,那么只有在我使用按钮移除片段时才会发生闪存。调用onFragmentTouch时不会闪烁 - 如果我在模拟器上运行它,那么我可以看到它同时闪烁,按下按钮和片段触摸。

为简化起见,我的onFragmentTouch监听器只是调用实际删除片段的函数remove。按钮也在其XML中调用同样的函数。 我不明白为什么会这样。代码供参考。

在主要活动中添加片段:

public void addFragment(View v)
    {
        int randomColor =
                Color.argb(255, (int)(Math.random() * 255), (int)(Math.random() * 255), (int)(Math.random() * 255));
        mfragment = CircularRevealingFragment.newInstance(20, 20, randomColor);
        getFragmentManager().beginTransaction().add(R.id.container, mfragment).commit();
    }

删除片段的功能,也在主要活动中:

public void remove(View v){
        Animator unreveal = mfragment.prepareUnrevealAnimator(0, 0);
        unreveal.addListener(new Animator.AnimatorListener()
        {
            @Override
            public void onAnimationEnd(Animator animation)
            {
                getFragmentManager().beginTransaction().remove(mfragment).commit();
            }
            //hiding other overridden function.
        });
        unreveal.start();
    }

CircularRevealingFragment非常简单,大多数都与github项目中的相同。不公平的动画师:

public Animator prepareUnrevealAnimator(float cx, float cy)
    {
        int radius = getEnclosingCircleRadius(getView(), (int)cx, (int)cy);
        Animator anim = ViewAnimationUtils.createCircularReveal(getView(), (int) cx, (int) cy, radius, 0);
        anim.setInterpolator(new AccelerateInterpolator(2f));
        anim.setDuration(1000);
        return anim;
    }

有人可以解释视频中显示的行为吗?

1 个答案:

答案 0 :(得分:3)

我认为主要问题是提交FragmentTransaction异步执行。如果您想立即执行使用getFragmentManager().executePendingTransactions()