Ho diverse viste all'interno di FrameLayout. C'è una transizione che ho scritto in cui ogni vista ha una classe di animazione personalizzata applicata. Durante questa transizione, ho bisogno di portare la vista nella parte inferiore dell'ordine z in primo piano. Lo faccio con:Android View.bringToFront() provoca lo sfarfallio
public static void putBackAtFront(ViewGroup v)
{
v.getChildAt(0).bringToFront();
refreshEverything(v);
}
Questo viene chiamato dall'interno di applyTransformation() della mia animazione personalizzata.
cioè
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() chiamate invalidate() e requestLayout() sul genitore FrameLayout e tutti i suoi figli.
Tutto funziona perfettamente tranne che quando viene chiamato putBackAtFront(), la vista che ora si trova nella parte inferiore scompare per un singolo fotogramma prima di riapparire all'istante, producendo uno sfarfallio notevole. Ho anche provato senza chiamare refreshEverything(), non fa differenza.
ho scelto come target API livello 7.
Spiacente, ho aggiornato la mia domanda per chiarire. Sto già facendo come dici tu; putBackAtFront() viene chiamato una sola volta alla fine della transizione, non tutte le volte. –