Aprendiendo Android VIII – Detectando pulsaciones

Aprendiendo Android VIII – Detectando pulsaciones

Desarrollo y programación

Aprendiendo Android VIII – Detectando pulsaciones

3 octubre, 2010 11:31

«Aquí estamos de nuevo, con nuestros eclipses listos y una nueva entrega de «aprendiendo android».

A raíz de estos artículos u otras vías, a veces me llegan dudas o preguntas de como se pueden realizar determinadas acciones en android, o simplemente consultas de ejemplos de códigos para implantar en aplicaciones.
Para está ocasión he optado por rescatar dos de estas demandas para explicar como pueden ser ejecutadas en android.
De alguna forma podemos decir que esta entrega la hacéis vosotros :)»

Esta opción puede ser particularmente útil tanto como para aplicaciones como para juegos. Lo que vamos a conseguir es hacer que nuestro código reconozca en que zona de la pantalla estamos realizando una pulsación.

Lo primero a tener presente es que, a diferencia de los servicios, las actividades van siempre acompañadas de un interface o entorno gráfico, los cuales están compuestos por los ya conocidos layouts, views, etc.
Sobre uno de estos componentes es sobre el que aplicaremos este tipo de código para reconocer la pulsación, digamos que esta función trabaja cono un listener asignable a un componente que, a su vez, puede contener a otros componentes.

Aunque pueda parecer algo confuso, os aseguro que no lo es.
Para verlo lo más claro posible, vamos a crear un LinearLayout que ocupará toda la pantalla con un simple botón en el centro.
Aquí tenéis el xml por si queréis pegarlo directamente en vuestro proyecto, es muy, muy sencillo

Vamos a comprobar que al ejecutar nuestra aplicación, si pulsamos el botón obtendremos un resultado y así pulsamos cualquier zona de la pantalla obtendremos otro distinto.

Une vez que hayamos hecho esto, veremos también como obtener la posición exacta de la pulsación.

Como es costumbre ya, leemos el código completo y tras esto, vemos como funciona.


Como se aprecia en el código vamos a crear un listener denominado setOnTouchListener que asignaremos al LinearLayout que nos hace de background de la actividad.
Dentro de la acción del click es donde indicaremos la gestión a realizar al pulsar sobre cualquier zona del LinearLayout. Pista este caso, volveremos a utilizar a nuestros viejos amigos los toast para mostrar un mensaje que indique sencillamente que hemos pulsado sobre la pantalla.

Aparte del reconocimiento de la pulsación, en nuestro sencillo código tenemos también definido un botón y un listener que reconoce, como se hace lógico, la pulsación sobre este mismo obteniendo un mensaje toast  que indica que hemos pulsado el botón.

Si ejecutamos en este punto la aplicación observamos que el botón prevalece sobre el fondo al realizarse la pulsación, eso es simplemente por el orden en que están definidos los elementos en el entorno gráfico de la actividad.

Es interesante recordar que al LinearLayout podemos asignarle imágenes u otros elementos, pero que a la hora de reconocer la pulsación el código tendrá en cuenta el propio Layout, no los elementos que contenga.

Una vez visto esto, avancemos un poco más para intentar hacer esta opción más útil, vamos a localizar el punto concreto de la pantalla donde estamos presionando.

Este ejemplo de posicionamiento está  muy extendido por internet ya que puede resultar bastante útil sobre todo, como principio, de cara a la creación de juegos.

El resultado sería algo así:

Para esto, dentro de la acción a realizar dentro del setOnTouchListener, incluiremos la siguiente condición bolean:


Por si alguien quiere insertarlo directamente en su proyecto, este sería el código completo:

Aquellos que más o menos sigáis esta sección sabréis que a veces puedo ser un poco “pesado” con la canción de que un factor absolutamente decisivo en el desarrollo es la imaginación, de modo que imaginemos un simple ejemplo con este código que acabamos de ver J

Simplemente pasando los valores de las coordenadas a String y con un sencillo “if / else, ya podemos desencadenar determinadas acciones dependiendo exclusivamente de la zona de la pantalla en concreto que hayamos presionado.

Como decíamos al iniciar el ejemplo, una acción que, como principio, puede resultar muy útil a la hora de interactuar con el usuario.

El segundo tema que trataremos de una forma sencilla, rápida y clara, es la adaptación  de una aplicación a diversas resoluciones  y hacerla compatible al market de cualquier terminal.

Haciendo un rápido ejercicio de memoria “historia android” , cuando fue publicado el SDK 1.6 (Cupcake), en este venía incluida la opción de tener diferentes carpetas contenedoras de gráficos para diferentes resoluciones, a saber:

Hdpi – 480×800 ó 480×854

Mdpi – 320×480

Ldpi – 320×240

En cada una de ellas guardaremos los gráficos adaptados a cada resolución, como por ejemplo el icono de nuestro programa

Una vez sabido esto, debemos decir  a nuestra aplicación que este código funciona en diversas resoluciones y que aunque esté compilado en una versión X de android, pongamos por ejemplo la 1.6 también funciona correctamente en una inferior como la 1.5.

Esta anotación la realizaremos desde nuestro manifest de la siguiente forma:

Os animo como siempre a dar diferentes usos y puntos de vista a los códigos o explicaciones que os facilito, ya que como muchas veces repito, el desarrollo de una aplicación requiere de más o menos conocimientos, pero sobre todo, requiere de ganas, ilusión y originalidad.

Un saludo a todos :)

Vierco.

PD: Aquí os dejamos el artículo en formato .txt para que podáis acceder al código