2010-04-06 7 views
7

Soy nuevo en el desarrollo de Android, solo estoy leyendo documentos y estoy probando las API . Estoy confuso de cómo ImageView logró dibujar solo una parte de su contenido después de una invocación de invalidación (Rect).¿Cómo hace ImageView simplemente volver a dibujar parte de su contenido cuando se llama a invalidación (Rect)?

He comprobado ImageView.java, no encontraron otro método de dibujo excepto onDraw (lienzo), pero onDraw (lienzo), sólo cortar el dibujable sólo si es beyound límites visibles de la vista. También leí la implementación de View.invalidate (Rect), creo que la clave de esta función llama al mParent.invalidateChild (this, r); Sin embargo, creo que la vista padre no sabe cómo dibujar al niño en el Rect dado, finalmente tiene que llamar a algún método de su hijo paint out.

¿Alguien ha investigado esta parte de los códigos? ¿Me podría dar alguna guía por favor?

Respuesta

1

Supongo que el código está en la clase View.

Hay dos respuestas interesantes de Romain Guy en el grupo de google.

+0

-1 ya que ambos enlaces están muertos. Incluir algunos de sus contenidos aquí hubiera sido mejor. –

+1

+1 porque los enlaces no están muertos ... Acabo de probarlos. Sin embargo, acepto que es bueno agregar contenido en casos como este. – Justin

0

creo androide dibujar la vista al igual que la lona en J2ME, todo el código empate no se dibujar directamente al hardware (pantalla), que acaba de dibujar a un búfer o dibujable o algo. Cuando llamamos a View.invalidate (Rect), el sistema copia la imagen en el rect del búfer (o dibujable) al hardware (pantalla).

3

Por lo que puedo deducir, hay dos optimizaciones funcionando una. Por un lado, si el niño es un grupo de visión, solo se redibujan los niños de este grupo que se cruzan con el área invalidada. Además, el lienzo está recortado a los límites de este rect. Esto significa que se deben mezclar menos píxeles a través del bus al framebuffer, y que las operaciones de dibujo que se recortan por completo se pueden omitir.

Esta es una suposición semi-educada. Busqué la fuente hace unos meses y estoy bastante seguro de lo de ViewGroup. El segundo se puede probar anulando el recorte en onDraw y comprobando si vuelve a dibujar todo.

+0

Soy un novato de Android y tengo una pregunta aquí http://stackoverflow.com/questions/21027199/am-i-invalidating-the-entire-screen-on-every-call Proporcione la respuesta si es posible . – Kraken

Cuestiones relacionadas