gpt4 book ai didi

android - fragment 在移除和动画结束后闪烁

转载 作者:太空狗 更新时间:2023-10-29 12:39:14 36 4
gpt4 key购买 nike

我一直在尝试使用循环显示动画从我的 Activity 中插入和删除 fragment 。我找到了这个演示 repo here正是这样做的。我所做的唯一更改是在单击按钮时删除 fragment ,而不是 fragment 触摸监听器。

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

一些观察:
- 如果我在我的移动设备上运行代码,那么只有在我使用按钮删除 fragment 时才会出现闪光。调用 onFragmentTouch 时不会出现 flash。
- 如果我在模拟器上运行它,那么我可以看到它在按钮按下和 fragment 触摸上都闪烁。

为了简化事情,我的 onFragmentTouch 监听器只是调用一个函数 remove 来实际删除 fragment 。按钮在其 XML 中也调用了相同的函数。我不明白为什么会这样。引用代码。

在主要 Activity 中添加 fragment :

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

删除 fragment 的函数,也在主 Activity 中:

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;
}

谁能解释视频中显示的行为?

最佳答案

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

关于android - fragment 在移除和动画结束后闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746162/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com