android - 带动画的 fragment 交易使谷歌地图变黑

标签 android google-maps android-fragments

我在如何确定 fragment 事务何时实际完成方面遇到一些问题。

问题是我的 Fragment 事务有一个持续 250ms 的动画,如果用户在动画完成之前按下 backPress 按钮,它会给我一张黑色的 map 。

这是我启动交易的代码

    public void startTransactionAnimated(BaseFragment fragment, int startEnter, int startExit, int endEnter, int endExit) {
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.setCustomAnimations(startEnter, startExit, endEnter, endExit);
    transaction.replace(R.id.content_frame, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

fragmentHandler.startTransactionAnimated(toiletPageFragment,
            R.anim.enter_from_right, R.anim.no_animation, R.anim.no_animation, R.anim.exit_to_right);

不同的动画都有 250 毫秒的持续时间。

普通 View :

Normal View

黑色 map :

Black Map

我尝试过getSupportFragmentManager().executePendingTransactions();但没有任何结果。

最佳答案

好吧,我确实成功了。这是一项相当大的工作,但已经完成了!

这就是我所做的。

我有一个扩展 Fragment 的 BaseFragment 类。

protected void onAnimationStarted () {}

protected void onAnimationEnded () {}

protected void onAnimationRepeated () {}

    @Override
public Animation onCreateAnimation (int transit, boolean enter, int nextAnim) {
    //Check if the superclass already created the animation
    Animation anim = super.onCreateAnimation(transit, enter, nextAnim);

    //If not, and an animation is defined, load it now
    if (anim == null && nextAnim != 0) {
        anim = AnimationUtils.loadAnimation(getActivity(), nextAnim);
    }
    //If there is an animation for this fragment, add a listener.
    if (anim != null) {
        anim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart (Animation animation) {
                onAnimationStarted();
                Log.i("TESTTAG", "ANIM STARTED: " );
            }
            @Override
            public void onAnimationEnd (Animation animation) {
                Log.i("TESTTAG", "ANIM END: " );
                onAnimationEnded();
            }
            @Override
            public void onAnimationRepeat (Animation animation) {
                onAnimationRepeated();
            }
        });
    }
    return anim;
}

这里我添加了这个。这使得在我使用的 fragment 中覆盖 onAnimationStartonAnimationEnded 成为可能。

    @Override
protected void onAnimationStarted() {
    super.onAnimationStarted();
    isAnimationDone = false;
}

@Override
protected void onAnimationEnded() {
    isAnimationDone = true;
    super.onAnimationEnded();
}

这里我设置了一个 bool 值来查看动画是否真的结束了。

然后在 fragment 中的 backPress 上(这是我为捕获 backPress 事件而创建的自定义方法),我添加了以下代码。

    @Override
public void doBack() {
    if (isAnimationDone){
        getActivity().getSupportFragmentManager().popBackStack();
    }
}

动画现在将完成,因此用户无法解决黑色 map 问题。

关于android - 带动画的 fragment 交易使谷歌地图变黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46217631/

相关文章:

android - RecyclerView 滚动问题中的多行 EditText

javascript - 单击 map 标记时平滑滚动

iphone - 如何在ios中集成谷歌地图?

javascript - 如何向包含标记的谷歌地图添加附加标记

android - DriveFolder.listChildren() 未显示其所有子项

android - 缩放图像时出现问题

android - "App not installed"试图安装已签名的 apk

android - popBackStack() 并在 Adapter 中传递参数

android - 如何生成具有临时 subview 的组合 View 模型?

java - android fragment 内的 fragment