2011-06-09 20 views
9

Tengo una visión (personalizado dibujado) añadió con getWindowManager().addView() y más tarde estoy modifiying la LayoutParameters de ella (cambiando x & width) y llamar a getWindowManager().updateViewLayout(). Esto funciona pero recibo dos actualizaciones de pantalla, la primera solo mueve todo de acuerdo con el nuevo x y luego se escala de acuerdo con el nuevo ancho. ¿Alguna idea sobre por qué sucede esto a pesar de que solo llamo al updateViewLayout solo una vez con los nuevos parámetros de diseño?extraño comportamiento updateViewLayout

FYI: onDraw método de la vista personalizada dibujada mencionada aquí también es llamada solo una vez por el sistema durante este proceso.

+0

¿OnMeasure o onLayout se llaman como se esperaba? – Snicolas

+0

Como @Snicolas declaró, tal vez una de las funciones de diseño esté causando este re-layout/measure o invalidación de los padres –

+0

¿resolvió usted este problema? usar runOnUiThread solo hecho es peor de alguna manera. –

Respuesta

2

tratar de hacer:

view.post(new Runnable() { 

    public void run() { 
    view.updateViewLayout(); 
    } 

}); 
+0

¿Esto funcionó? – lokoko

1

updateViewLayout es un método que puede ser anulado por su ViewGroup personalizado y en este método anulado puede implementar todo lo que desee cambiar.

Quizás hagas algo mal con eso?

O también tal vez tenga que implementar este código en UiThread como en otras preguntas. - En este caso cuando cambia sus parámetros de forma asincrónica con la primera llamada de la función de dibujo por sistema, su método puede cambiar solo un parámetro y en la segunda llamada también se cambiará el segundo parámetro.