studio programacion makeroid example ejemplo android frameworks view window directfb

programacion - Arquitectura de la GUI de Android: relación entre Surface/view/window/canvas



surfaceview android camera (3)

======================

ACTUALIZACIÓN: Después de varios días en Google y experiments , he encontrado las respuestas para la mayoría de esas preguntas tontas. Ver las respuestas que he enviado.

=========

¿Cuál es la responsabilidad de Android Window?

Aquí hay algunas preguntas:

  • ¿Es responsable de recoger y enviar la entrada?
  • ¿Cuál es la relación entre la vista y la ventana? ¿Igual que la relación entre superficie y ventana en DFB?
  • ¿Cuál es la relación entre una actividad y la ventana? ¿Cada actividad tendrá una ventana?
  • ¿Es posible crear una ventana desde la aplicación? ¿Y cuándo es necesario?
  • ¿Soporta Android multi-ventana?

EDITAR: Añadir más preguntas:

  1. ¿Cuáles son las responsabilidades de varias clases, como Ventana, Vista, Lienzo, Superficie y cómo colaboran entre sí?

  2. ¿Cuántas ventanas suele tener una actividad?

3. ¿Se adjuntarán todas las vistas en una actividad a la ventana? ¿Qué significa adjuntar?

  1. ¿Todas las ventanas tienen superficie? Cada lienzo tiene superficie?

  2. View es responsable de focus / keyEvent / manager, mientras que Cavus solo es responsable de la operación de "dibujo".

  3. ¿WindowManager es responsable del apilamiento de ventanas? ¿Cómo se relaciona eso con SurfaceFlinger?

  4. La vista no posee una superficie, ¿la ventana que posee la vista contenida?

  5. La Vista se dibuja utilizando lienzo obtenido llamando a surface.lockCanvas ().

  6. ¿Cuándo se llamará onDraw (Canvas)? ¿Cómo y quién pasa los parámetros del lienzo?

  7. ¿Tiene lienzo el tamaño? ¿La superficie de la ventana siempre será de pantalla completa?

EDITAR de nuevo:

Después de ver esta maravillosa presentación proporcionada por Romain Guy http://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL , se resuelven varias preguntas y se agregan varias más :)

  1. ¿Cada actividad tendrá un ViewRoot y por lo tanto una ventana?
  2. ¿Hay alguna necesidad de crear una ventana explícitamente? y ¿La superficie de la ventana siempre estará en pantalla completa?
  3. ¿La barra de estado estará en otra ventana?
  4. ¿Cuál es el tamaño de la superficie? ¿Será eso siempre en pantalla completa?

¿Windows es responsable de recopilar y enviar la entrada?

No. ViewRoot es responsable de esto.

¿Cuál es la relación entre la vista y la ventana? ¿Igual que la relación entre superficie y ventana en DFB?

?

¿Cuál es la relación entre una actividad y la ventana? ¿Cada actividad tendrá una ventana?

Sí, la mayoría del tiempo. Sin embargo, un SurfaceView tiene su propia ventana. Entonces, si una Actividad tiene un SurfaceView, tendrá más de una Ventana.

¿Es posible crear una ventana desde la aplicación? ¿Y cuándo es necesario?

No es necesario.

¿Android es compatible con múltiples ventanas?

Por supuesto. Usando HierachyView puede ver claramente que hay más de una ventana en el sistema.

1.¿Cuáles son las responsabilidades de varias clases, como Window , View , Canvas , Surface y cómo colaboran entre sí? 2. ¿Cuántas ventanas usualmente tiene una Actividad?

Por lo general uno.

3. ¿Todas las vistas en una actividad se adjuntarán a una ventana? ¿Qué significa adjuntar? 4. ¿Cada ventana tiene una superficie? ¿Cada lienzo tiene una superficie?

Cada ventana tiene una superficie y Surface utiliza Canvas para dibujar en la superficie.

5.View es responsable de gestionar los eventos de foco / clave, mientras que Canvas solo es responsable de la operación de "dibujo".

SÍ.

6. ¿ WindowManager es responsable del apilamiento de ventanas? ¿Cómo se relaciona eso con SurfaceFlinger ?

No estoy seguro de la responsabilidad de WindowManager. (QUE HACER)

SurfaceFlinger se utiliza para componer la superficie que está asociada a diferentes ventanas / actividades.

7.La vista no posee una superficie, la ventana que la vista contenía posee?

La vista se dibujará en la superficie usando Canvas. La ventana a la que se adjunta la vista posee la superficie.

Esto podría entenderse implementando una vista de personalización, cuando debe anular el onDraw(Canvas) en su clase derivada.

8.La vista se dibuja usando lienzo obtenido al llamar a surface.lockCanvas ()?

SÍ.

9.¿Cuándo y cómo se onDraw(Canvas) y quién pasa los parámetros canvas?

onDraw() será llamado por RootView y cuando se RootView invalidate. El parámetro canvas se pasa desde RootView.

10. ¿El lienzo tiene un tamaño? ¿La superficie de una ventana siempre será de pantalla completa?

No puedo decir con seguridad. Pero cuando creo una vista personalizada, el tamaño del lienzo obtenido de onDraw (Lienzo) es de pantalla completa.

Sin embargo, en mi entender, por razones de rendimiento, la Superficie para la ventana no siempre debe ser de pantalla completa. Pero este supuesto no ha sido verificado. Por ejemplo, la ventana de la barra de estado no debería estar a pantalla completa.

1. ¿Todas las Activity tendrán un ViewRoot y, por lo tanto, una Window ?

SÍ.

2. ¿Hay alguna necesidad de crear una ventana explícitamente? ¿La superficie de la ventana siempre será de pantalla completa?

No hay necesidad de crear la ventana explícitamente per se.

3. ¿La barra de estado estará en otra ventana?

SÍ.

4. ¿Cuál es el tamaño de la superficie? ¿Será eso siempre en pantalla completa?


Apreciando que hayas hecho todas esas preguntas. 1) AFAIK cada Actividad tiene alterado un ViewRoot y cada ViewRoot tiene al menos una ventana 2) No hay necesidad de crear una ventana explícitamente y creo que siempre debe ser una ventana llena ... aunque no estoy seguro de esto 3) Sí, puede ser, nosotros puede colocar la barra de estado en otra ventana 4) No es parte de la ventana, no siempre cubre la pantalla completa.

Por favor corrija mi entendimiento si dije algo incorrecto aquí.


Aquí hay una descripción conceptual muy simple y básica de cómo ocurre la interacción entre la ventana, superficie, lienzo y mapa de bits.
Mira esta respuesta por hackbod , gran explicación.