Android View.bringToFront()会导致闪烁

Jar*_*ith 6 android view viewgroup

我在FrameLayout中有几个视图.我已经编写了一个转换,其中每个视图都应用了自定义动画类.在此过渡期间,我需要将z顺序底部的视图置于前面.我这样做:

    public static void putBackAtFront(ViewGroup v) 
    {
        v.getChildAt(0).bringToFront();
        refreshEverything(v);
    }
Run Code Online (Sandbox Code Playgroud)

这是从我的自定义动画的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);
        }
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

refreshEverything()调用父FrameLayout及其所有子节点上的invalidate()和requestLayout().

除了在调用putBackAtFront()时,一切都工作正常,现在位于底部的视图在立即重新出现之前消失为单帧,导致明显的闪烁.我也试过没有调用refreshEverything(),它没有任何区别.

我的目标是API级别7.

Mar*_*vre 1

applyTransformation() 在动画过程中被多次调用,因此您应该根据 interpolatedTime 执行动画,当其为 1.0 时,动画已结束,因此您应该在这里调用您的 Bring to Front 。

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