2012-05-17 10 views
5

Tengo una aplicación que permite a los usuarios crear complicados diseños de pantalla a partir de un conjunto de controles predefinidos. Luego, esos controles se comunican entre sí para generar la funcionalidad final. El problema que estoy viendo es que no importa lo que haga, parece que cualquier rediseño causado por un cambio en un control está obligando a rediseñar toda la pantalla (como se ve al habilitar "Mostrar cambios en la pantalla"). Debido a que tengo muchos controles personalizados sin mucho XML detrás de ellos, este redibujado puede ser bastante lento.¿Cómo detener a Android para que no vuelva a dibujar toda la pantalla cada vez que algo cambie?

Por ejemplo, un control puede ser una calculadora que está construida a partir de unos pocos diseños lineales. Otra podría ser una generación de grillas de comando generada dinámicamente a partir de diseños lineales. Cada uno de estos se agrega a un diseño relativo para padres cuando se carga la pantalla. Al presionar una tecla en la calculadora, la cuadrícula de comandos se redibuja aunque no haya cambiado nada en ninguna de sus vistas.

He intentado activar la aceleración de hardware y cambiar todos los tipos de capa de vistas a LAYER_TYPE_HARDWARE sin suerte.

¿Cómo me aseguro de que solo se vuelva a dibujar una subsección específica de la pantalla? En este punto, no estoy haciendo ninguna llamada para invalidarme, pero tengo mis propias versiones de botones, diseños y otros componentes de IU, por lo que si necesito bajar a ese nivel de control, al menos ya existe un marco en su lugar.

Respuesta

0

esto se ve muy parecido a éste .. Moving Android View and preventing onDraw to be called over and over again sin embargo, si lo que desea es dibujar una sección, intente llamar invalidate(rect) donde rect es una Rect que defina un área que será "vuelve a dibujar", distinta de la que sabemos, se hipocresía.

+0

No del todo, tal vez no lo explique bien. Tengo un botón en la pantalla. Cuando presiono ese botón, cambia a su estado presionado. Esto, por supuesto, requiere que el botón sea redibujado. Pero lo que estoy viendo es que se vuelve a dibujar toda la pantalla, no solo el botón. No llamo a invalidar yo mismo, solo dejo que el widget subyacente de Android haga su trabajo. Debe ser posible. He jugado con otras aplicaciones en el dispositivo con Mostrar cambios de pantalla habilitados y puedo ver que algunos de ellos solo vuelven a dibujar partes de la pantalla mientras que otros lo vuelven a dibujar. Incluso mi aplicación se limita a sí misma cuando uso diálogos o brindis. –

+0

I _do_ tengo algunas versiones personalizadas de botones, diseños, etc., pero son muy simples y no estoy anulando ninguna función que tenga que ver con el ciclo de dibujo. –

Cuestiones relacionadas