Android View.bringToFront() вызывает мерцание

У меня есть несколько представлений внутри FrameLayout. Я написал переход, в котором к каждому представлению применяется собственный класс анимации. Во время этого перехода мне нужно вывести представление в нижней части z-порядка на передний план. Я делаю это с помощью:

    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() вызывает invalidate() и requestLayout() для родительского FrameLayout и всех его дочерних элементов.

Все работает отлично, за исключением того, что при вызове putBackAtFront() представление, которое сейчас находится внизу, исчезает на один кадр, а затем мгновенно появляется снова, что приводит к заметному мерцанию. Я также пробовал без вызова refreshEverything(), это не имеет значения.

Я ориентируюсь на уровень API 7.

6
задан Jarrod Smith 3 April 2012 в 03:06
поделиться