You are on page 1of 27

Desarrollo de aplicaciones para Android

3: Tcnicas de programacin I (Java) Eugenio Jacobo Hernndez Valdelamar Junio, 2012.

Contenido

Instalacin de un ambiente de desarrollo Java Estructura de una aplicacin Android Tcnicas de programacin

Consola de comandos Dibujando con el dedito Obtencin de geoposicin con el GPS Escaneo de cdigo de barras

Instalacin de un ambiente de desarrollo


Motodev studio 4.0
El IDE cuenta con editor de cdigo y un editor visual de UI para las formas (actividades) Conviene mucho este paquete integrado para evitar que configurar manualmente el Eclipse; el paquete incluye los plugins para Eclipse

Eclipse

Libreras Depurador Emuladores (QEMU) Ejemplos

Android SDK / NDK

Oracle Java JDK 1.6

Runtime Java Compilador javac Prerrequisito para ofuscador de cdigo ProGuard

Win / Linux / Mac

Estructura de un app Android


Perspectiva del desarrollador (organizacin de archivos) Proyecto /src package * .java

/res layout drawable


.png .axml

App.apk

Manifest .xml

Mapa de navegacin del demo


Consola de comandos

Inicio

Finger paint

GPS demo

Consola de comandos

Generalmente cuando se empieza a programar, los programas ms sencillos son los de consola (modo texto). Las aplicaciones Android no tiene un modo de consola (terminal) como tal, pero con los elementos bsicos es posible tener algo similar. Se plantea como ejemplo un pequeo interprete de comandos cuya salida tratar de parecerse a una consola de texto.

Diseo
console.axml LinearLayout Los comandos propuestos son: Class ConsoleActivity TextView OnCreate() OnClick() Print Cls Repeat N <str>

EditText

Button

Una nueva actividad aade un elemento <activity> al manifiesto

Tcnica #1: ligar un layout a la actividad


console.axml

setContentView

ConsoleActivity

Las actividades en el sistema son manejadas mediante un stack de actividades. Cuando una nueva actividad se inicia, se coloca en la cima del stack y se convierte en la actividad en ejecucin activa.

http://developer.android.com/reference/android/app/Activity.htm l

Tcnica #2: consumir controles de un layout


Receta: 1. instanciar los controles en el evento OnCreate de la actividad 2. Ligar cada control a un evento que permita manipularlo

Tcnica #3: ligar un botn con la interfaz OnClickListener


Otra forma de ligar un botn a una accin en funcin de un evento, es al usar la interfaz OnClickListener. Incluso varios botones en una actividad pueden responder al mismo evento, solo hay que diferenciarlos.

Tcnica #4: mensajes tipo MsgBox


Para realizar el seguimiento de una ejecucin por lo general usamos mensajes a consola o MsgBox; en Android esto se maneja con un objeto llamado Toast.

Tcnica #5: diseo de UIs usando proporciones


Al usar el editor grfico de UIs de Eclipse, parece fcil hacer que un control adopte el tamao que le indicamos con el ratn. Sin embargo esto provoca que la definicin de la UI quede con valores fijos, lo cual provoca que, al pasar la app de un dispositivo a otro, haya partes que no sean accesibles o no se puedan ver. Una mejor prctica para esto es usar layouts lineales y, ya sea a este control o a los que contenga, aplicarles la propiedad android:layout_weight y jugar con las proporciones.

Tcnica #6: ya no cabe, no lo veo uso de un ScrollView


Si el contenido de una actividad sale del campo de visin, es posible hacer scroll en la actividad para ver contenido muy largo. El scrollview debe encapsular a la parte del UI que sale del campo de visin. LinearLayout ScrollView LinearLayout

TextView

EditText

Button

Tcnica #7: un men principal

Para navegar entre las diferentes partes de esta app, la idea es crear una actividad que se encargue de permitir al usuario seleccionar que parte del demo quiere acceder y direccionarlo hacia ella. Para ello es necesario:

Crear botones en la UI de la actividad de men Ligar los botones al evento OnClick (ver tcnica 3)

Demo v.0.1

Finger paint

En las tablets no hay ratn (mouse)!!! La interaccin con el dispositivo es mediante los dedos, por lo que hay que conocer como funciona y se controla dicha interaccin. El caso se enfoca a implementar una pequea aplicacin de dibujo, donde se cuente con una superficie que pueda mostrar trazos cuando se presione la pantalla.

Diseo
LinearLayout Class FingerPaintActivity OnCreate() View Class FingerPaintView OnDraw() OnTouchEvent() En este caso el elemento View no se obtendr del layout, sino que se definir dentro del cdigo de la actividad.

Tcnica #8: grficos 2D en una actividad

Una forma de hacer una actividad que usa grficos 2D, es crear una actividad y, en lugar de referenciar un layout, se referenca una instancia de una clase derivada de View. La subclase de View debe implementar el mtodo OnDraw(), donde se define el despliegue grfico.

El objeto Paint se encarga de establecer las caracteristicas del objeto grfico a desplegar. El objeto Canvas se encarga de desplegar los objetos grficos (objetos geomtricos, texto, paths, etc)

Tambien debe sobrecargarse el evento OnTouchEvent() donde se identifica el tipo de MotionEvent generado por el usuario (UP, DOWN,MOVE). El repintado se hace con una llamada al mtodo invalidate()

public class FingerPaintActivity extends Activity { float x, y; String accion="accion"; Path path= new Path(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FingerPaintView fpaintv= new FingerPaintView(this); setContentView(fpaintv); } class FingerPaintView extends View{ public FingerPaintView(Context context) { super(context); // } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.GRAY); Paint paint= new Paint(); paint.setAntiAlias(true); paint.setTextSize(15); canvas.drawText(accion, 10, 10, paint); canvas.drawText("x:"+x, 10, 30, paint); canvas.drawText("y:"+y, 10, 50, paint); paint.setStyle(Style.STROKE); paint.setStrokeWidth(6); paint.setColor(Color.BLUE); if (accion=="down") path.moveTo(x,y); if (accion=="move") path.lineTo(x,y); canvas.drawPath(path, paint); }

@Override public boolean onTouchEvent(MotionEvent event) { x= event.getX(); y= event.getY(); if (event.getAction()== MotionEvent.ACTION_DOWN){ accion="down"; } if (event.getAction()== MotionEvent.ACTION_MOVE){ accion="move"; } if (event.getAction()== MotionEvent.ACTION_UP) { accion="up"; } invalidate(); return true; } }

Variaciones adicionales al FingerPaint

Mejoras propuestas:

Agregar paleta de colores Agregar gomas Limpiar pantalla Modificar caracteristicas del trazo Efectos Superponer el dibujo en una imagen (capas) Salvar la imagen

Demo GPS

Los nuevos dispositivos (telfonos y tabletas) cuentan con GPS, por lo que es til conocer su funcionamiento y manipulacin. El caso de estudio implementa la obtencin de la geoposicin del dispositivo. Importante:

por cuestiones de seguridad, la activacin del GPS se delega al usuario, por lo que no hay en las APIs manera de acceder a operaciones de encendido o apagado. El uso del GPS requiere agregar en el manifiesto, el permiso ACCESS_FINE_LOCATION La obtencin de coordenadas no es instantnea, pues el GPS debe detectar cierta cantidad de satlites para triangular su posicin. La ubicacin y el clima son factores.

Diseo
Activity LinearLayout TextView TextView LocationGPS

LocationListener
MyLocationListener

Tcnica #9: acceso al GPS


Para acceder a la obtencin de la geoposicin, una vez encendido el dispositivo, debe implementarse una clase que implemente la interfaz LocationListener, y sobrecargue el mtodo OnLocationChanged() para que realice lo que necesitamos. En la actividad, esta clase se liga a una instancia del LocationManager, que es el encargado de acceder al GPS, y de esta manera es que se relaciona el evento.

Exploracin adicional del GPS

Integracin con Google Maps

http://www.devx.com/wireless/Article/39239/1954 http://gitorious.org/android-maps-api

Uso de API Gitorious (usa OpenStreetMaps)

Comentarios

Las tcnicas mostradas permiten al desarrollador:


Organizar su cdigo Contemplar que con poco cdigo se obtienen resultados interesantes Para acceder a funcionalidad como el GPS, es necesario configurar el dispositivo para activar el perifrico y en algunos casos solicitar estos permisos en el manifiesto de la app.

You might also like