Hoy os presento un tutorial muy muy interesante. Se trata de utilizar el objeto GestureOverlayView (reconocedor de gestos) para que reconozca los números del 1 al 9. Es sólo en este tutorial claro ya que se puede utilizar para reconocer cualquier cosa tal y como vamos a ver hoy.
Lo que vamos a aprender hoy puede tener infinitos usos, ya sea para conseguir poder escribir a mano alzada en nuestra aplicación o para hacer más rápida la navegación dentro de la aplicación mediante símbolos personalizados.
Este tutorial consta de dos partes bastante diferenciadas, una es la de crear nuestra librería de gestos (es este caso números) y la segunda parte es como añadir esta librería al GestureOverlayView para que los reconozca en directo.
Crear librería con nuestros gestos personalizados (Custom Gesture)
Para crear la librería con nuestros propios gestos es muy simple, necesitaremos el emulador del SDK de Android (AVD) y encender nuestro emulador con almenos la versión 1.6 de Andrpoid. En ésta y en las posteriores versiones viene instalado un software llamado Gestures Builder que nos ará toda la faena. A continuación pongo una captura de pantalla y una pequeña explicación.
Como vemos en las impresiones de pantalla simplemente hay que ir añadiendo los símbolos en este caso números, que queramos que reconozca la aplicación. En este ejemplo vemos que hemos repetido los números dos veces, yo aconsejo hacer más de una repetición de número para tener un abanico más amplio de gestos.
Como vemos en la segunda imagen los gestos se van guardando en un archivo /mnt/sdcard/gestures para sacar ese archivo del emulador hacia nuestro Pc para utilizarlo posteriormente en nuestra aplicación se haría con la aplicación \sdk\tools\ddms.exe ó \sdk\tools\monitor.exe se ahía de la siguiente manera:
De esta manera ya tendremos nuestro archivo personalizado de gestures en nuestr Pc listo para importar en nuestro proyecto.
Posibles errores
Si al entrar a la aplicación de Gesture Builder aparecere este error que dice Could not load /mnt/sdcard/gestures. Make sure you have storage avaiable. Hay que ir a nuestro AVD a ver el emulador de android que tenemos creado, darle a modificar y añadirle un SdCard con al menos 50Mb.
Trabajar con Gesture en Eclipse
Una vez que ya tenemos nuestro archivo gesture en nuestro escritorio vamos a ver como se tendría que hacer en eclipse para utilizarlo.
Como siempre necesitaremos el codigo de layout, en este caso con el componente de GestureOverlayView ocupando toda la pantalla ya que solo es un ejemplo:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <android.gesture.GestureOverlayView android:id="@+id/gestureOverlayView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > </android.gesture.GestureOverlayView> </RelativeLayout>Una vez tengamos ya el simple layout con solo ese componente vamos a la clase del Activity, dejo el código acontinuación completamente comentado:
//Implementamos el OnGesturePerformedListener para que el codigo no sea muy pesado public class MainActivity extends Activity implements OnGesturePerformedListener{ //Creamos el componente para relacionarlo con el XML //Y el gesture library para rescatar el archivo que hemos //creado anteriormente private GestureOverlayView gesture; private GestureLibrary gLibrary; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Relacionamos con el XML gesture = (GestureOverlayView)findViewById(R.id.gestureOverlayView1); //Le añadimos el listener gesture.addOnGesturePerformedListener(this); //Creamos la carpeta res/raw y añadimos el archivo gestures //añadimos el raw al gLibrary gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); //lo cargamos... gLibrary.load(); } //Al obtener algun gesto... @Override public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { //añadimos los diferentes resultados obtenidos //ya comparados con nuestro archivo y ordenados de mas fiable a menos ArrayList<Prediction> predictions = gLibrary.recognize(gesture); //Si a encontraod algun resultado if (predictions.size() > 0) { //En este caso solos nos interesa el gesto que más se parezca Prediction prediction = predictions.get(0); //Miramos que tengo un parecido mínimo if (prediction.score > 1.5) { //Decimos lo que ha escrito Toast.makeText(this, prediction.name,Toast.LENGTH_SHORT).show(); }else{ //Si no supera el 1.5 de fiabilidad.. Toast.makeText(this, "No se ha reconocido.",Toast.LENGTH_SHORT).show(); } } } }Adjunto vídeo para que podáis entender mejor el ejercicio:
Muchas gracias a todos y no olviden escribir sus dudas o comentarios!!! :D
hola
ResponderEliminarcomo descargar gestores por-favor
No hay que descargarlo, se encuentra dentro del emulador a partir de la versión 2.3
EliminarGracias!
.¿
ResponderEliminarPerfecto, el único ejemplo que me funcionó, gracias.
ResponderEliminar