Esto es otro tipo de vista que es mas directa que una Vista normal, esta por decirlo así mas cerca del hardware.
Su ventaja es que usandola no utilizamos para nada la UI del sistema operativo Android.
Para ello debemos pintar en pantalla en otro hilo y ahi es donde usar la Vista Superficial "SurfaceView " tiene su utilidad.
¿Como se hace?
SurfaceHolder surfaceholder = surfaceView.getHolder();
// del surfaceholder saldrá la SurfaceView,pero noinmediatamente
// para saber si ya esta creado debemos hacer :
boolean surfaceYaCreada;
surfaceYaCreada = surfaceholder.getSurface().isValid();
Luego podremos asegurarlo:
Canvas SurfaceHolder.lockCanvas();
// aseguramos el canvas, ya que estamos tratando con hilos y devuelve un canvas que podemos usar
// para pintar en un buffer auxiliar, no en pantalla
SurfaceHolder.unlockAndPost(Canvas canvas);
// se suelta el canvas y se manda a pantalla lo que habia en el buffer auxilar
Atención a:
Recordar que la SurfaceView no se crea instantaneamente con "surfaceView.getHolder()"
La vista superficial se destruye cuando la actividad es pausada "onPause" y se recrea cuando es continuada "onResume"
Nota:
Volatile en Java se usa para indicar que el valor de la variable va a ser modificado por varios procesos.
El valor de la variable no sera almacenada el la memoria asociada al proceso sino que es tara en la memoria
de acceso "general". El acceso a la variable será como si estuviera en un bloque sincronizado.
Cualquier declaracion en la que se haga refernecia a algo declarado volatile será ejecutado en orden, el compilador no podra cambiar el orden.
Su ventaja es que usandola no utilizamos para nada la UI del sistema operativo Android.
Para ello debemos pintar en pantalla en otro hilo y ahi es donde usar la Vista Superficial "SurfaceView " tiene su utilidad.
¿Como se hace?
SurfaceHolder surfaceholder = surfaceView.getHolder();
// del surfaceholder saldrá la SurfaceView,pero noinmediatamente
// para saber si ya esta creado debemos hacer :
boolean surfaceYaCreada;
surfaceYaCreada = surfaceholder.getSurface().isValid();
Luego podremos asegurarlo:
Canvas SurfaceHolder.lockCanvas();
// aseguramos el canvas, ya que estamos tratando con hilos y devuelve un canvas que podemos usar
// para pintar en un buffer auxiliar, no en pantalla
SurfaceHolder.unlockAndPost(Canvas canvas);
// se suelta el canvas y se manda a pantalla lo que habia en el buffer auxilar
Atención a:
Recordar que la SurfaceView no se crea instantaneamente con "surfaceView.getHolder()"
La vista superficial se destruye cuando la actividad es pausada "onPause" y se recrea cuando es continuada "onResume"
Nota:
Volatile en Java se usa para indicar que el valor de la variable va a ser modificado por varios procesos.
El valor de la variable no sera almacenada el la memoria asociada al proceso sino que es tara en la memoria
de acceso "general". El acceso a la variable será como si estuviera en un bloque sincronizado.
Cualquier declaracion en la que se haga refernecia a algo declarado volatile será ejecutado en orden, el compilador no podra cambiar el orden.

Hola Fran,
ResponderEliminarEn primer lugar muchas gracias.
Estoy haciendo un paint con android y me ha sido muy útil tu código.
Ahora intento guardar lo pintado pero sólo me sale si la clase extiende de View y no de SurfaceView. ¿sabes cómo se hace?
Muchas gracias,
María
Me alegro de que te haya servido de algo el código. Lo siento pero hace ya tiempo que escribí esta entrada y no me acuerdo de como funcionaba todo esto. De hecho, me hice el blog para consultarlo, yo mismo, cuando no me acordara de las cosas :P
EliminarSiento no poder ayudarte.
Este comentario ha sido eliminado por el autor.
ResponderEliminar