miércoles, 10 de febrero de 2016

Trabajando con los Sensores en Android. Parte III.

En esta tercera parte, vamos a explicar cómo desarrollar una app para android que utilice los eventos táctiles de la pantalla. Para ello, es recomendable leer este tutorial a la par que visualizáis el código en GitHub.

Esta aplicación consiste en reconocer un patrón de gestos sobre la pantalla y una vez detectados, abrir la aplicación de la cámara si el patrón es el correcto. El patrón correcto escogido tiene forma de 'C', por lo que si no introducimos este patrón la aplicación nos dirá que es un gesto incorrecto y tendremos que repetir el proceso

Para el funcionamiento de la aplicación, declaramos un array cuadricula de tipo ImageView que representará la cuadrícula en la cual haremos el gesto. Así, haremos dos arrays más de tipo booleano, uno para guardar el patrón correcto y otro que se rellenará cuando el usuario toque las celdas de la cuadrícula.

Empezamos implementando las interfaces View.OnClickListener y View.OnTouchListener en nuestra clase MainActivity que serán las encargadas de recoger los eventos táctiles de la pantalla.

En el método onCreate inicializamos todos los objetos relacionados con el xml del layout e inicializamos el patrón correcto con la figura 'C' y el patrón del gesto a false.

Implementamos el método onTouch para recoger el evento del gesto que realice el usuario y comprobar si es correcto o no. Para ello, captamos la posición x e y donde estamos pulsando la pantalla y comprobamos si está en alguna casilla de la cuadrícula con la función estaEn, si es así establecemos esa posición del patrón del gesto a true y pintamos la casilla de amarillo. Cuando levantamos el dedo tras el gesto, comprobamos si el patrón de array es igual al que ya habíamos fijado con la figura 'C' y si es correcto pintamos las posiciones de verde y abrimos la cámara, de lo contrario pintaremos las posiciones de rojo durante 0.5 segundos y resetearemos todas las variables utilizadas para volver a intentarlo.

El método estaEn recibe una imagen del array de cuadrícula y una posición x e y de la pantalla. Lo que hace esta función es obtener la localización del punto x e y de la esquina superior izquierda de la primera celda de la cuadrícula y de la segunda para así restarlas y obtener lo que mide una celda. Sabiendo lo que mide la celda, es sencillo comprobar si la x e y que pasamos a la función se encuentra dentro del rango de posiciones de la celda de la cuadrícula.




Con respecto al xml, hemos utilizado un TableLayout de 3x3 con un background negro para que cuando introduzcamos un TableRow con sus tres ImageView, hagamos android:layout_margin="1dp" y deje una separación pequeña. Esto nos permite dibujar los bordes negros para diferenciar las celdas.

Finalmente en el AndroidManifest ponemos la siguiente línea para que la aplicación sólo esté en vertical y los permisos para utilizar la cámara y acceder al almacenamiento:

android:screenOrientation="portrait"
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


Para el desarrollo de esta aplicación hemos hecho uso de la siguiente referencia:

http://developer.android.com/intl/es/guide/topics/media/camera.html

Sigue leyendo en la siguiente entrada sobre el reconocimiento de movimientos.


No hay comentarios:

Publicar un comentario