vistas studio sirve que para layouts grupos example ejemplo crear android view viewgroup

sirve - vistas de android studio



Android View.bringToFront() causa parpadeo (2)

Estoy pensando que tiene que ser una de tres cosas:

Si está compilando con las 3.0+ API, puede tener habilitada la aceleración de hardware. Esto también está activado por defecto en 4.0. Puedes intentar usar

setLayerType(LAYER_TYPE_SOFTWARE, null);

para deshabilitar la aceleración HW en ese diseño / vista / ventana.

Además, es posible que no necesite llamar a requestLayout () , si todas las vistas son secundarias de un diseño relativo, un cambio de índice z no debería preocuparlo.

Llamar invalidado casi podría no ser necesario. ¿Has intentado hacer que las Vistas sean enfocables y simplemente llamar a requestFocus () en lugar de a bringToFront () en absoluto? bringToFront () aparentemente elimina la vista de su padre y la vuelve a agregar. Esto podría fácilmente causar una invalidación entre los pasos, ya que no creo que nada esté deteniendo el dibujo mientras esto sucede.

Tengo varias Vistas dentro de un FrameLayout. Hay una transición que he escrito donde cada vista tiene una clase de animación personalizada aplicada. Durante esta transición, necesito llevar la Vista en la parte inferior del orden Z al frente. Yo hago esto con:

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

Esto se llama desde applyTransformation () de mi Animación personalizada.

es decir

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 () llama a invalidate () y requestLayout () en el FrameLayout principal y todos sus elementos secundarios.

Todo funciona perfectamente, excepto que cuando se invoca putBackAtFront (), la vista que está ahora en la parte inferior desaparece para un único fotograma antes de volver a aparecer de forma instantánea, lo que da como resultado un parpadeo notable. También lo intenté sin llamar a refreshEverything (), no hace ninguna diferencia.

Me estoy dirigiendo a API Nivel 7.


applyTransformation () se llama varias veces durante la animación, por lo que debe hacer la animación basada en el tiempo interpolado, cuando su 1.0, la animación está al final, por lo que debe llamar a traer al frente aquí.

Entonces, en mi opinión, este parpadeo ocurre cuando en algunas de estas llamadas a su método, getChildAt (0) obtiene una vista diferente a la que desea y aparece el parpadeo.