gpt4 book ai didi

Android View.bringToFront() 导致闪烁

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:12 24 4
gpt4 key购买 nike

我在一个 FrameLayout 中有几个 View 。我写了一个转换,其中每个 View 都应用了一个自定义动画类。在此过渡期间,我需要将 z 顺序底部的 View 移到前面。我这样做:

    public static void putBackAtFront(ViewGroup v) 
{
v.getChildAt(0).bringToFront();
refreshEverything(v);
}

这是从我的自定义动画的 applyTransformation() 中调用的。

public class PivotAnimation extends Animation {
private View view;
...
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
...
if(interpolatedTime >= 1.f && isAtBack(view))
{
putBackAtFront(view);
}
...
}
...
}

refreshEverything() 在父 FrameLayout 及其所有子项上调用 invalidate() 和 requestLayout()。

一切正常,除了调用 putBackAtFront() 时,现在位于底部的 View 会消失一帧,然后立即重新出现,从而导致明显的闪烁。我也尝试过不调用 refreshEverything(),这没有区别。

我的目标是 API 级别 7。

最佳答案

applyTransformation() 在动画过程中被多次调用,所以你应该根据 interpolatedTime 做动画,当它是 1.0 时,动画结束,所以你应该在这里调用你的 bring to front。

所以在我看来,当在对您的方法的某些调用中,getChildAt(0) 获得与您想要的 View 不同的 View 并出现闪烁时,就会发生这种闪烁。

关于Android View.bringToFront() 导致闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9858156/

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