Sei sulla pagina 1di 100

ANDROID: Introduccin y Entorno de

desarrollo
Por Ainhoa DSB

31 de octubre de 2012
Valoracin:
0 votos
1 Comentarios
Programacin
Paso a paso sobre la instalacin del kit de desarrollo de Android para Eclipse.

En el SO Android, normalmente se programa en Java, pero se puede programar en HTML5, CSS3, Javascript,
en C y C++, pero para programar en estos ltimos lenguajes es necesario utilizar Android NDK r3, que se
puede encontrar en developer.android.com/sdk/ndk

Herramientas necesarias
1. Kit de desarrollo Java JDK. Se pueden utilizar las versiones a partir de la 5 hasta la
ltima: www.oracle.com/technetwork/java/javase/downloads
2. Entorno de desarrollo de Eclipse: www.eclipse.org/downloads
3. Kit de desarrollo Android SDK: developer.android.com/sdk
4. Drivers para los diferentes dispositivos

Imagen 1 - Descargar Android
Configuracin
1. Equipo > Propiedades (botn derecho del ratn) > Administracin avanzada del sistema > Variables de
entorno >> Editar la variable PATH aadiendo al final, aadiendo (;) en caso de no estar ya puesto, la ruta
SDK Manager de Android
2. Configurar el plugin de Android para Eclipse: esta accin se realiza desde Eclipse, llevando a cabo una
actualizacin de software personalizada. La manera de realizarlo depender de la versin de Eclipse
utilizada, pero en todos los casos es muy parecido. Se puede obtener ms informacin
en developer.android.com/sdk/eclipse-adt.html
o Help > Install New Software > Pulsar en Add
Nombre: ADT (Android Developer Tools)
dl-ssl.google.com/android/eclipse
OK
o Seleccionar Developers Tools > OK

Imagen 2 - Instalar en Eclipse

o Seleccionar todas las opciones que nos indica y darle a aceptar

Imagen 3 - Aceptar trminos

Imagen 4 - Instalando...

Imagen 5 - Aceptar la instalacin

Imagen 6 - Reiniciar Eclipse
3. Hay que instalar los paquetes necesarios para los diferentes dispositivos. Al reiniciar Eclipse sale una
pantalla en la que se puede elegir qu instalar.
4.
Imagen 7 - Instalar SDK Manager al reiniciar
5. Si no sale,
a. Window > Android SDK and AVD Manager > A la izquierda aparece Available Packages
b. Seleccionar todos los que aparezcan a la derecha. Son bastantes MB, y dependiendo de la conexin
pueden tardar ms o menos. Quizs no sean todos necesarios, pero no est de ms tenerlos instalado por si
algn da son necesarios.
c. Para que se instalen hay que pulsar: Install Selected. Despus seleccionar en "Accept All" y pulsar en
"Install"
d. Despus de tenerlo instalado, es bueno realizar estos pasos para comprobar si existen actualizaciones.
6.

Imagen 8 - Seleccionar los elementos a instalar
7.

Imagen 9 - Aceptar todos los trminos


Paquete de Android
1. 1. Permite
a. Desarrollar
b. Compilar
c. Empaquetar
d. Usar
2. 2. Proporciona:
a. Android Project Wizard: genera los archivos requeridos para trabajar el proyecto con Eclipse
b. Editor de recursos: proporciona todas las herramientas necesarias para disear interfaces de usuario
c. Manager Android: SKD y AVD (Android Virtual Device)
d. Perspectiva DDMS de Eclipse: permite depurar y debuggear aplicaciones Android
e. Integracin con utilidades: integracin con Login LogCat de Android y tambin con la utilidad
Hierarchy Viewer Layout de Android
f. Construccin automatizada: de aplicaciones para emuladores y microtelfonos Android
g. Soporte ProGuard: paquete de aplicaciones y herramientas de cdigo para la firma de las aplicaciones y
para la optimizacin del cdigo ofuscacin
Creacin de un proyecto Androdid
1. File > New > Android Project File > New > Project > Android Application Project

Imagen 10 - Seleccionar tipo de proyecto
2. Dar nombre al proyecto en Project Name
Hay que darle un nombre al paquete: com.nombre_paquete_global.nombre_proyecto

Imagen 11 - Dar un nombre a la aplicacin
3. Seleccionar el icono de la aplicacin:
o a. Clipart: icono prediseado
o b. Text: texto personalizado
o c. Image: imagen guardada en el ordenador


Imagen 12 - Icono de la aplicacin
4. CreateActivity debe marcarse para que se genere automticamente una clase que lanza la aplicacin, es la
que se utiliza por defecto. Cada actividad representa una accin que hace la aplicacin

Imagen 13 - Crear una 'Activity' en blanco
5. Dar un nombre a la clase que lanzar la aplicacin:

Imagen 14 - Configuracin 'Activity'
6. Instalar las dependencias necesarias para poder ejecutar la aplicacin:

Imagen 15 - Instalar dependencias
7. Finalmente, pulsar "Finish" y se crear el entorno de trabajo:

Imagen 16 - Espacio de trabajo


Arquitectura de un proyecto Android
ARCHIVOS:
6. AndroidManifest.xml: es el archivo de configuracin central de la aplicacin
7. default.properties: es un archivo que no debe ser editado que lo utiliza Eclipse y el plugin ADT
8. progruard.cfg: hay que editar el archivo para configurar la optimizacin del cdigo y la ofuscacin cuando
se lleve a cabo la publicacin de la aplicacin

DIRECTORIOS:
9. src: dentro se encuentra el paquete creado y se incluye todo el cdigo fuente de la aplicacin. Por defecto,
se encuentra el archivo Activity que se ha creado en el proceso de creacin del proyecto siempre que se
haya seleccionado la opcin
10. gen: dentro se encuentra el paquete creado y dentro est el archivo R.java para el manejo de recursos que
no se debe editar
11. assets: dentro se encuentran los archivos de recursos, que no sean compilados, necesarios para el proyecto
12. 4. res: se manejan todos los recursos de la aplicacin. Incluye animaciones, grficos, archivos de diseos,
datos, archivos raw
a. drawable-xxx: es donde van los iconos grficos de la aplicacin, en diferentes tamaos
b. layout: dentro se encuentra el archivo main.xml, el archivo de recursos grficos para organizar los
controles en la pantalla principal de la aplicacin
c. values: dentro se encuentra el archivo strings.xml, el archivo de recursos para definir los strings que se
utilicen
AndroidManifest.xml:
13. Manifest: se utiliza para configurar las caractersticas generales de la aplicacin
14. Application: se utiliza para definir detalles de la aplicacin. En la parte de Application Nodes se incluyen
todas las actividades que la aplicacin puede realizar y, por defecto, aparece la generada en la parte de
generacin del proyecto. Si se quiere poder debuggear la aplicacin, es necesario poner Debuggable a
true.
15. Permissions: sirve para otorgar permisos en caso de tener que acceder al telfono para leer datos
16. Instrumentation: sirve para utilizar las clases del plugin SDK de testeo
17. AndroidManifest.xml: sirve para editar el archivo manualmente desde el cdigo xml

COMPILAR Y DEPURAR:
1. Crear y configurar un Dispositivo Virtual Android (Android Virtual Device - AVD)
o a. Window > Android SDK and AVD Manager y pulsar en Virtual Device o icono robot Android con
flecha hacia abajo
o b. New
i. Name: nombre
ii. Target: seleccionar la versin que se quiere utilizar para debuggear
iii. SD Card Size: capacidad de la tarjeta SD del telfono, ej.: 1024 MiB, cada una de esas imgenes
ocupa un espacio en el disco duro, por tanto, hay que elegir con cuidado el valor.
1. Informacin sobre MiB: es.wikipedia.org/wiki/Mebibyte
2. Informacin sobre KiB: es.wikipedia.org/wiki/Kibibyte
3. Conversor online de MB a MiB:
www.convertunits.com/from/MiB/to/megabyte
Snapshot: habilitarlo para que los reinicios del emulador sean ms rpidos aunque ocupa un poco ms de
memoria
Skin: el aspecto que se quiere que tenga el emulador
Finalmente, pulsar Create AVD


Imagen 17 - Crear AVD


c. Una vez acabado, aparece en la lista de Virtual Device para poder ser utilizado. Debe aparecer con un
tick al inicio para saber que realmente se ha creado correctamente, en caso contrario, no se puede utilizar
porque no es un dispositivo vlido y se debe generar uno nuevamente


Imagen 18 - Comprobar si se ha creado correctamente
2. Crear una configuracin de depuracin de Eclipse para depurar dentro del IDE
a. Proyecto > Botn derecho > Debug as/Run as o flecha del icono mariquita > Debug
Configurations

Imagen 19 - Crear ejecucin

Imagen 20 - Crear depuracin
b. A la izquierda Android Applications
Name: nombre_debbug

Imagen 21 - Crear nuevo Debug

Browse > Elegir el proyecto

Imagen 22 - Asociar proyecto

Target: elegir el emulador que se acaba de crear. Seleccionar automtico para que no pregunte por el
emulador que se quiere aplicar cada vez que se ejecute. Poner manual en el caso de querer probarlo para
diferentes dispositivos

Imagen 23 - Asociar dispositivo
Common: seleccionar Debug/Run si se quiere que aparezca en la lista

Imagen 24 - Para que aparezca en la lista

Imagen 25 - Lista de favoritos
3. Lanzar el emulador con el AVD creado en el paso 1
Darle al icono de la mariquita o ponerse en el proyecto, botn derecho y "Debug as" y seleccionar el que
se quiera probar en ese momento, en este caso, Nombre Aplicacion
Una vez completadas todas las tareas, Eclipse vincula su depurador al depurador Android o, en su defecto,
al dispositivo que se tenga conectado va USB.
Al lanzarlo sale la siguiente pantalla:

Imagen 26 - Aplicacin iniciada
Autor
Ainhoa DSB
Desarrolladora de aplicaciones en Java y experta en tecnologas abiertas para la creacin de sitios web.
Manual
Desarrollo para Android
Comentarios
Fue enviado 1 comentario al artculo
Edson
06/11/2012
0 votos
Android
Sr. Desarrollo web si habra un manual de instalacin para el desarrollo de SO Android sera mucha mas
eficaz.
Marcar como spam
Enviar un comentario al artculo
http://www.desarrolloweb.com/articulos/android-intro-entorno-desarrollo.html
Publicado por Luis Edwin AA en 20:15
Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
Etiquetas: Netbeans
http://java-netbeans1.blogspot.com/2011/02/que-es-netbeans.html
http://zarza.usal.es/~fgarcia/doc/tuto2/A_I.htm
BIBLIOGRAFA
Se ha dividido este apartado en diversos puntos, intentando explicar qu referencias bibliogrficas han sido
utilizadas en mayor o menor medida para realizar este tutorial.
En cada resea bibliogrfica se indican el nmero de pginas que tiene, y un comentario personal indicando
su utilidad para una mayor profundizacin en Java.
A. Bibliografa consultada para la actual versin:
[Arnold y Gosling, 1997] Ken Arnold y James Gosling. Addison-Wesley/Domo. "El lenguaje de
Programacin Java". Wesley Iberoamericana. 1997. 334 pginas. (Muy bsico, escrito por el
desarrollador del lenguaje).
[Eckel, 1997] Bruce Eckel. "Hands -on Java Seminar". Presindent MindView Inc. 1997. 577
pginas. (Tutorial completo en Ingls en formato PDF).
[Garca et al., 1999]. Javier Garci de Jaln, Jos Ignacio Rodrguez, Iigo Mingo, Aitor Imaz,
Alfonso Brazlez, Alberto Larzabal, Jess Calleja y Jon Garca. "Aprenda Java como si
estuviera en primero". Universidad de Navarra. 1999. 140 pginas. (Tutorial muy bsico, en el que
se trata la potencia de Java, pero sin profundizar en ningn tema en particular).
[Garca, 1997] Francisco Jos Garca Pealvo. "Apuntes de teora de la asignatura Programacin
Avanzada del tercer curso de Ingeniera Tcnica en Informtica de Gestin". Universidad de
Burgos. 1997. 216 pginas. (Comentan la teora de la programacin orientacin al objeto. Han sido
resumidos para dar una visin de la programacin orientada a objeto en el apartado I.1).
[Johnson, 1996] Jeff Johnson. "Coding Standards for C, C++, and Java". Vision 2000 CCS
Package and Application Team. 1996. 14 pginas. (Consejos para el formato de los fuentes Java, C y
C++).
[Morgan, 1999] Mike Morgan. "Descubre Java 1.2". Prentice Hall. 1999. 675 pginas. (Sin duda
muy interesante, sobre todo por su actualidad al tratar con Java 2, y por su extensin al tratar todas
las bibliotecas de Java).
[Naughton, 1996] Patrick Naughton. "Manual de Java". Mc. Graw Hill 1996. 395 pginas.
(Introduce todos los aspectos de la programacin bsica en Java).
[Rojo, 1998] Ignacio Rojo Fraile. "Comparativa de herramientas Java". Artculo de la revista Solo
Programadores n49. Tower. Octubre 1998. (Compara 5 IDEs Java).
[Sanz, 1998] Javier Sanz Alamillo. "Novedades y cambios con Java 2". Artculo de la revista Solo
Programadores n55. Tower. Marzo 1999. (Buen resumen de los cambios que han surgido en el JDK
1.2).
[Sun, 1998] Sun Microsystems Inc. "JDK 1.2 Documentation". www.sun.com. 1997.
(Documentacin de la API de Java del JDK).
[van Hoff et al., 1996] Arthur van Hoff, Sami Shaioi y Orca Starbuck. "Hooked on Java".
Addison-Weslet. 1996. (Todo lo que hace falta saber para crear applets, con muchos ejemplos. En
ingls).
[Zolli, 1997] Andrew Zolli. "La biblia de Java". Anaya multimedia. 1997. 814 pginas. (Completo
en lo a que biliotecas del JDK 1.1 se refiere).
B. Bibliografa adicional o citada en la actual versin:
[Piattini et al., 1996] Mario G. Piattini, Jos A. Calvo-Manzano, Joaqun Cervera y Luis
Fernndez. "Anlisis y diseo detallado de Aplicaciones informticas de gestin". Ra-Ma. 1996.
[Rambaugh et al., 1998] J. Rambaugh J., M. Blaha, W. Premerlani, F. Eddy y W. Lorensen.
"Modelado y Diseo Orientados a Objetos. Metodologa OMT". Prentice Hall, 2 reimpresin. 1998.
[Rational, 1997] Rational Software Corporation. "The Unified Modeling Language
Documentation Set 1.1". www.rational.com. Septiembre de 1997.
[Rifflet, 1998] Jean-Marie Rifflet "Comunicaciones en UNIX". McGraw Hill. 1998.
C. Bibliografa adicional que se utiliz en la versin 1.0
[Corts et al.,1996] Jos Luis Corts, Nuria Gonzlez, Virginia Prez, Paqui Villena y Ana
Rosa Freire. "Java, el lenguaje de programacin de Internet". Data Becker 1996.
[Cuenca, 1996] Pedro Manuel Cuenca Jimnez. "Programacin en Java para Internet". Anaya
Multimedia. 1996.
[Cuenca, 1997] Pedro Manuel Cuenca Jimnez,. "Programacin en Java". Ediciones Anaya
Multimedia. 1997.
[Framin, 1997] Jos Manuel Framin Torres. "Manual Imprescindible de Java". Ediciones
Anaya Multimedia. 1997.
[Lalani, 1997] Suleiman 'Sam' Lalani. "Java, biblioteca del programador". Ediciones McGraw
Hill. 1997.
[Froufe, 1997] Agustn Froufe. "Tutorial de Java". Facultad de Informtica de Sevilla. 1997.
http://www.fie.us.es/info/internet/JAVA
Instalacin de Eclipse
publicado a la (s) 29/09/2010 11:16 por Chus Martinez
https://sites.google.com/site/picandojavacom/mundo-java/ide-eclipse
http://www.java.com/es/download/whatis_java.jsp
http://hitstoup.com/introducci%C3%B3n-a-android-sdk-(software-development-kit)_d9b18.html

Calcular edad con fecha de nacimiento
Hoy entre mis curiosidades me encontr un cdigo muy til para saber la edad de una persona a partir de su
fecha de nacimiento la explicacin del cdigo esta en los comentarios

NOTA: Recuerden que en la clase Calendar los meses comienzan en el 0 es decir Enero es igual a 0 y
Diciembre es igual a 11 (No 12 como podra esperarse)
view source
print?
01 /**
02 *
03 * @author www.JaverosAnonimos.tk
04 */
05
class CalculaFecha {
06
public static void main(String []args){
07 /*Accedemos al metodo estatico atravez del nombre de nuestra clase
08
Podemos quitar el static al metodo y se accederia de la siguiente
manera
09 CalculaFecha cal= new CalculaFecha();
10 cal.calcularEdad("01-01-1999");
11 */
12 System.out.println(CalculaFecha.calcularEdad("01-01-1999"));
13 }
14 public static Integer calcularEdad(String fecha){
15 Date fechaNac=null;
16 try {
17
/*Se puede cambiar la mascara por el formato de la fecha
que se
18 //quiera recibir, por ejemplo ao mes da "yyyy-MM-dd"
19 en este caso es da mes ao*/
20
fechaNac = new SimpleDateFormat("dd-MM-yyyy").parse(fecha);
21
} catch (Exception ex) {
22 System.out.println("Error:"+ex);
23 }
24 Calendar fechaNacimiento = Calendar.getInstance();
25 //Se crea un objeto con la fecha actual
26 Calendar fechaActual = Calendar.getInstance();
27 //Se asigna la fecha recibida a la fecha de nacimiento.
28 fechaNacimiento.setTime(fechaNac);
29 //Se restan la fecha actual y la fecha de nacimiento
30
int ao = fechaActual.get(Calendar.YEAR)-
fechaNacimiento.get(Calendar.YEAR);
31
int mes =fechaActual.get(Calendar.MONTH)-
fechaNacimiento.get(Calendar.MONTH);
32
int dia = fechaActual.get(Calendar.DATE)-
fechaNacimiento.get(Calendar.DATE);
33 //Se ajusta el ao dependiendo el mes y el da
34
if(mes<0 || (mes==0 && dia<0)){
35 ao--;
36 }
37 //Regresa la edad en base a la fecha de nacimiento
38
return ao;
39 }


SBADO, SEPTI EMBRE 20, 2008
JAVA - CALCULO DE LA EDAD DESDE JAVA
2:14 P.M. HENRY JOE WONG URQUIZA 3 COMENTARIOS

"Si usa algn cdigo del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano
derecha, para que se vuelva Seguidor del Blog y tambin comentenos que tal les pareci el tutorial"


Acontinuacion les presento un metodo para el calculo de la edad de una persona desde java
public static int calcularEdad(String fecha) {
String datetext = fecha;
try {
Calendar birth = new GregorianCalendar();
Calendar today = new GregorianCalendar();
int age=0;
int factor=0;
Date birthDate=new SimpleDateFormat("dd-MM-
yyyy").parse(datetext);
Date currentDate=new Date(); //current date
birth.setTime(birthDate);
today.setTime(currentDate);
if (today.get(Calendar.MONTH) <=
birth.get(Calendar.MONTH)) {
if (today.get(Calendar.MONTH) ==
birth.get(Calendar.MONTH)) {
if (today.get(Calendar.DATE) >
birth.get(Calendar.DATE)) {
factor = -1; //Aun no celebra su cumpleaos
}
} else {
factor = -1; //Aun no celebra su cumpleaos
}
}
age=(today.get(Calendar.YEAR)-
birth.get(Calendar.YEAR))+factor;
return age;
} catch (ParseException e) {
return -1;
}

}

A continuacin dejo una funcin para calcular la edad de una persona. Realmente puede servir para calcular la diferencia en aos
entre una fecha cualquiera y la actual.
import java.util.Calendar;

public static int calcularEdad(Calendar fechaNac) {

Calendar fechaActual = Calendar.getInstance();

// Clculo de las diferencias.
int anios = fechaActual.get(Calendar.YEAR) -
fechaNac.get(Calendar.YEAR);
int meses = fechaActual.get(Calendar.MONTH) -
fechaNac.get(Calendar.MONTH);
int dias = fechaActual.get(Calendar.DAY_OF_MONTH) -
fechaNac.get(Calendar.DAY_OF_MONTH);

// Hay que comprobar si el da de su cumpleaos es posterior
// a la fecha actual, para restar 1 a la diferencia de aos,
// pues an no ha sido su cumpleaos.</code>

if(meses < 0 // An no es el mes de su cumpleaos
|| (meses==0 && dias < 0)) { // o es el mes pero no ha llegado el
da.

anios--;
}
return anios;
}
Para probar esta funcin, le pasamos como parmetro un GregorianCalendar inicializado con una fecha, recordando
que los meses estn representados por una secuencia nmerica donde 0 correspone a Enero y 11 a Diciembre.
import java.util.GregorianCalendar;

public static void main(String[] args) {
System.out.println(calcularEdad(new GregorianCalendar(1984,11,24)));
}

Cdigos JAVA
viernes, 8 de junio de 2012
Calcular aos
private static void calcularAnnos(){
Date fechaNacimiento=new Date(87, 05, 8);
Date fechaHoy =new Date();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
System.out.println("Fecha nacimiento:"+dateFormat.format(fechaNacimiento));
System.out.println("Fecha nacimiento:"+dateFormat.format(fechaHoy));
int edad=fechaHoy.getYear()-fechaNacimiento.getYear();
System.out.println("Edad:"+edad);
System.out.println(fechaNacimiento.getMonth()+" "+fechaHoy.getMonth());
if((fechaNacimiento.getMonth()-fechaHoy.getMonth())>0){
edad--;
}
else if((fechaNacimiento.getMonth()-fechaHoy.getMonth())==0){
System.out.println(fechaNacimiento.getDate()+" "+fechaHoy.getDate());
if((fechaNacimiento.getDate()-fechaHoy.getDate())>0){
edad--;
}
}

System.out.println("Edad:"+edad);
}

Un mtodo en Java es un conjunto de instrucciones definidas dentro
de una clase, que realizan una determinada tarea y a las que podemos
invocar mediante un nombre.

Algunos mtodos que hemos utilizado hasta ahora:
Math.pow()
Math.sqrt()
Character.isDigit()
- System.out.println();

Cuando se llama a un mtodo, la ejecucin del programa pasa al
mtodo y cuando ste acaba, la ejecucin contina a partir del punto
donde se produjo la llamada.
Utilizando mtodos:
- Podemos construir programas modulares.
- Se consigue la reutilizacin de cdigo. En lugar de escribir el mismo
cdigo repetido cuando se necesite, por ejemplo para validar una fecha,
se hace una llamada al mtodo que lo realiza.
En Java un mtodo siempre pertenece a una clase.
Todo programa java tiene un mtodo llamado main. Este mtodo es el
punto de entrada al programa y tambin el punto de salida.
1. ESTRUCTURA GENERAL DE UN MTODO JAVA
La estructura general de un mtodo Java es la siguiente:
[especificadores] tipoDevuelto nombreMetodo([lista parmetros])
[throws listaExcepciones]
{
// instrucciones
[return valor;]
}
Los elementos que aparecen entre corchetes son opcionales.

especificadores (opcional): determinan el tipo de acceso al mtodo. Se
vern en detalle ms adelante.

tipoDevuelto: indica el tipo del valor que devuelve el mtodo. En Java
es imprescindible que en la declaracin de un mtodo, se indique el tipo
de dato que ha de devolver. El dato se devuelve mediante la instruccin
return. Si el mtodo no devuelve ningn valor este tipo ser void.
nombreMetodo: es el nombre que se le da al mtodo. Para crearlo hay
que seguir las mismas normas que para crear nombres de variables.
Lista de parmetros (opcional): despus del nombre del mtodo y
siempre entre parntesis puede aparecer una lista de parmetros
(tambin llamados argumentos) separados por comas. Estos parmetros
son los datos de entrada que recibe el mtodo para operar con ellos. Un
mtodo puede recibir cero o ms argumentos. Se debe especificar para
cada argumento su tipo. Los parntesis son obligatorios aunque
estn vacos.
throws listaExcepciones (opcional): indica las excepciones que puede
generar y manipular el mtodo.
return: se utiliza para devolver un valor. La palabra clave return va
seguida de una expresin que ser evaluada para saber el valor de
retorno. Esta expresin puede ser compleja o puede ser simplemente el
nombre de un objeto, una variable de tipo primitivo o una constante.
El tipo del valor de retorno debe coincidir con el tipoDevuelto que se ha
indicado en la declaracin del mtodo.
Si el mtodo no devuelve nada (tipoDevuelto = void) la instruccin
return es opcional.
Un mtodo puede devolver un tipo primitivo, un array, un String o un
objeto.
Un mtodo tiene un nico punto de inicio, representado por la llave de
inicio {. La ejecucin de un mtodo termina cuando se llega a la llave
final } o cuando se ejecuta la instruccin return.
La instruccin return puede aparecer en cualquier lugar dentro del
mtodo, no tiene que estar necesariamente al final.
2. IMPLEMENTACIN DE MTODOS EN JAVA
Pasos para implementar un mtodo:
1. Describir lo que el mtodo debe hacer
2. Determinar las entradas del mtodo
3. Determinar los tipos de las entradas
4. Determinar el tipo del valor retornado
5. Escribir las instrucciones que forman el cuerpo del mtodo
6. Prueba del mtodo: disear distintos casos de prueba
Ejemplo de mtodo: mtodo que suma dos nmeros enteros.
import java.util.*;
public class Metodos1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numero1, numero2, resultado;
System.out.print("Introduce primer nmero: ");
numero1 = sc.nextInt();
System.out.print("Introduce segundo nmero: ");
numero2 = sc.nextInt();
resultado = sumar(numero1, numero2);
System.out.println("Suma: " + resultado);
}
public static int sumar(int a, int b){
int c;
c = a + b;
return c;
}
}
El mtodo se llama sumar y recibe dos nmeros enteros a y b. En la
llamada al mtodo los valores de las variables numero1 y numero2
se copian en las variables a y b. El mtodo suma los dos nmeros y
guarda el resultado en c. Finalmente devuelve mediante la instruccin
return la suma calculada.
Ejemplo de programa Java que contiene un mtodo con varios
return:
Programa que lee por teclado un ao y calcula y muestra si es bisiesto.
Para realizar el clculo utiliza un mtodo llamado esBisiesto.

package bisiesto;
import java.util.*;
public class Bisiesto {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ao;
System.out.print("Introduce ao: ");
ao = sc.nextInt();
if(esBisiesto(ao)) //llamada al mtodo
System.out.println("Bisiesto");
else
System.out.println("No es bisiesto");
}
/**
* mtodo que calcula si un ao es o no bisiesto
*/
public static boolean esBisiesto(int a){
if(a%4==0 && a%100!=0 || a%400==0)
return true;
else
return false;
}
}

En la llamada al mtodo bisiesto, el valor de la variable ao se copia en
la variable a y el mtodo trabaja con esta variable. El valor true false
devuelto por return pasa a ser el valor de la condicin.
Ejemplo de programa Java: Mtodo que no devuelve ningn valor. El
mtodo cajaTexto recibe un String y lo muestra rodeado con un borde.
El tipo devuelto es void y no es necesario escribir la sentencia return. El
mtodo acaba cuando se alcanza la llave final.
import java.util.*;
public class MetodoVoid {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String cadena;
System.out.print("Introduce cadena de texto: ");
cadena = sc.nextLine();
cajaTexto(cadena); //llamada al mtodo
}
/**
* mtodo que muestra un String rodeado por un borde
*/
public static void cajaTexto(String str){
int n = str.length();
for (int i = 0; i < n + 4; i++){
System.out.print("#");
}
System.out.println();
System.out.println("# " + str + " #");
for (int i = 0; i < n + 4; i++){
System.out.print("#");
}
System.out.println();
}
}

Programacin orientada a objetos (Mtodos)
mtodos: conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas, slo basta o
referenciarlas a travs de dicho nombre en vez de tener que escribilas.
Dentro de estas instrucciones es posible acceder con total libertad a la informacin almacenada en los campos,
pertenecientes a la clase dentro de la que el mtodo se ha definido. Por lo que los mtodos premiten manipular los datos
almacenados en los objetos.
Sintaxis:
()
{
instrucciones;
}
Tipo devuelto: Todo mtodo puede devolver un objeto como resultado de la ejecucin de las insrucciones que lo froma, aqui
de indica el tipo del dato al que pertenece este objeto.
Si no devuelve nada se indica void y si devuleve algo es obligatorio finalizar la ejecucin de sus instrucciones con return
que indica el objeto a devolverse.
Parmetro: opcionalmente todo mtodo puede recibir en cada llamada una lista de objetos a los que podr acceder durante
la ejecucion de sus instrucciones. Aqui se indica cules son lo stipos de datos de estos objetos y cul es el nombre ocn el que
harn referencia las instreucciones de mtodo a cada uno de ellos.
An que l osobjetos que puede recibir el mtodo pueden ser diferentes, cada vez que se solicite su ejecucin simpre han de
ser los mismos tipos y han de seguir el orden establecido en parmetros.
ejmplo:
class persona
{
string nombre;
int edad;
string RFC;
void cumpleaos ()
{
edad ++;
}
}
Sintaxis para llamar a los mtodos de un objeto:
.(parmetro)
Parmetro: valores que se desean dar a los parmtros del mtodo al hacer la llamada. Si el mtodo no toma parmtros se
deja vaco.
ejemplo: llamda al mtodo cumpleaos de un objeto persona llamado p
p.cumpleaos();

Mtodos y Funciones
Las funciones y mtodos en java sirven para la optimizacin de cdigo y la reutilizacin del mismo. Si
quisiramos realizar sumas de dos o ms nmeros en diferentes puntos de la aplicacin sera
un problema estar realizando el mismo cdigo de la sumatoria a cada instante que lo necesitemos, por
lo tanto lo adecuado sera realizar una sola vez la suma y llamar a tal funcin cada vez que lo
necesitemos.

CREACIN DE MTODOS Y FUNCIONES

La ubicacin de las funciones o los mtodos se puede dar en la parte superior o inferior del main
principal o incluso en otra clase (Tema que se tratar en la siguiente gua) que luego se puede instanciar
en la clase que requiera los mtodos del otro.
-->
-->

MTODOS

Es un conjunto de cdigo reutilizable del cual se puede hacer un uso continuo que se encuentra
disponible en cualquier momento deseado dentro de la aplicacin.

FUNCIN

Las funciones son similares a los mtodos la diferencia es que estas retornan un resultado lo cual
puede ser almacenado dentro de una variable o impreso directamenteen pantalla, mientras que los
mtodos no retornan ningn tipo de dato pero a si mismo podran meterse variables al mismo mtodo lo
cual podra usarse como un tipo de retorno aunque no sera lo mismo.

EJEMPLO DE MTODOS Y FUNCIONES

Veamos un ejemplo, primero creemos un mtodo que realice la suma de dos nmeros, el cdigo sera el
siguiente:

private void MetodoSuma(float numero1, float numero2){
float Suma=numero1+numero2;
System.out.println(Suma);
}

Ahora creemos una funcin que realice lo mismo pero que retorne el resultado para almacenarlo dentro
de una variable, el cdigo lo vemos seguidamente:

private float FuncionSuma(float numero1, float numero2){
float Suma=numero1+numero2;
return Suma;
}

USO DE LOS MTODOS Y FUNCIONES
En el primero caso haremos el uso del mtodo cargndole con dos datos fijos. Creamos los dos datos
de tipo float y luego instanciamos al mtodo de la siguiente forma:

float Num1=7, Num2=4;
MetodosFunciones C=new MetodosFunciones();
C.MetodoSuma(Num1, Num2);

Primero debemos instanciar a la clase, en este caso a MetodosFunciones porque es el nombre de la
clase principal

MetodosFunciones C=new MetodosFunciones();

luego haciendo uso de su variable C instanciamos al mtodo o funcin que deseemos llamar como se
ve seguidamente

C.MetodoSuma(Num1, Num2);

Habiendo realizado el cdigo hasta este punto ya debera imprimir la suma de ambos nmeros,
entonces al ejecutar el cdigo debera mostrarnos el resultado de la suma de ambos nmeros.
Ahora para poder hacer uso de la funcin sera lo mismo, pero en esta oportunidad podramos hacer
uso de la clase ya instanciada con su variable C instanciandodirectamente a la funcin de la siguiente
forma:

Sumax=C.FuncionSuma(Num1, Num2);

En este caso asignamos a una variable Sumax la funcin ya que esta funcin retornara un resultado y
hara falta hacer impresin en pantalla de este dato lo cual podemos hacerlo de la siguiente forma

System.out.println(Sumax);

Tambin podra realizarse la impresin directamente sin necesidad de almacenarlo en
una variable como se muestra seguidamente lo cual dara el mismo resultado

System.out.println(C.FuncionSuma(Num1, Num2));

Aplicaciones controladas por eventos
La ejecucin en estas aplicaciones no sigue una ruta predeterminada, ejecuta distintas
partes del cdigo, segn sea llamada por eventos. Estos pueden ser: por causa del
usuario, del sistema, o otras aplicaciones. La secuencia de los eventos determinar la
secuencia del cdigo a ejecutarse.
Cuando un programa es controlado por eventos, usted escribe cdigo que se ejecuta en
respuesta a eventos "llamados" por el usuario, un evento puede ser un clic del mouse en
un botn.Difiere de la programacin basada en procedimientos, en que el programa
comienza en la primera lnea de cdigo y sigue un flujo definido llamando segn sea
necesario, es en cierta forma menos controlada por el programa y mas por el usuario. La
programacin controlada por eventos es la de las interfaces grficas de usuario; el
usuario acciona y el cdigo responde.

- Pasos para crear un programa con
Eclipse


El Eclipse es un entorno de trabajo profesional, por lo que en un principio puede parecer
complejo el desarrollo de nuestros primeros programas.
Todo programa en Eclipse requiere la creacin de un "Proyecto", para esto debemos
seleccionar desde el men de opciones:

O desde la barra de conos del Eclipse:

Ahora aparece el dilogo donde debemos definir el nombre de nuestro proyecto:

En el campo de texto "Project Name" ingresamos como nombre: Proyecto1 y dejamos todas
las otras opciones del dilogo con los valores por defecto. Presionamos el botn "Finish".
Ahora en la ventana de "Package" aparece el proyecto que acabamos de crear:

Como segundo paso veremos que todo programa en Java requiere como mnimo una clase.
Para crear una clase debemos seleccionar desde el men de opciones:

O desde la barra de conos del Eclipse:

En el dilogo que aparece debemos definir el nombre de la clase (en nuestro primer ejemplo la
llamaremos Clase1, luego veremos que es importante definir un nombre que represente al
objetivo de la misma), los otros datos del dilogo los dejamos con los valores por defecto:

Luego de presionar el botn "Finish" tenemos el archivo donde podemos codificar nuestro
primer programa:

Ms adelante veremos los archivos que se crean en un proyecto, ahora nos dedicaremos a
codificar nuestro primer programa. En la ventana de edicin ya tenemos el esqueleto de una
clase de Java que el entorno Eclipse nos cre automticamente.
public class Clase1 {

}
Todo programa en Java debe definir la funcin main. Esta funcin la debemos codificar dentro
de la clase: "Clase1".
Procedemos a tipear lo siguiente:


public class Clase1 {

public static void main(String[] parametro) {
System.out.println("Hola Mundo Java");
}

}
Es decir tenemos codificado en el entorno del Eclipse nuestro primer programa:

Como ltimo paso debemos compilar y ejecutar el programa, esto lo podemos hacer desde el
men de opciones:

O desde la barra de conos del Eclipse:

Si no hay errores de codificacin debemos ver el resultado de la ejecucin en una ventana del
Eclipse llamada "Console" que aparece en la parte inferior:

Lo ms importante es que quede claro los pasos que debemos dar para crear un proyecto en
Java. El objetivo de una clase, la funcin main etc. los veremos a lo largo de este curso.


Mtodos
Los mtodos son un conjunto de
procedimientos que permiten a un objeto
ejecute una accin o tarea sobre s mismo.
Por ejemplo, para un formulario tenemos el
mtodo Hide que har que el formulario se
oculte; o el mtodo Show que har que el
formulario se vuelva a mostrar. Hay
muchos eventos, propiedades, y dems.
Eventos (como ya se vio en el principio,
pero lo repetimos)
Un evento es una accin que es reconocida
por el objeto. Un evento ocurre, se dispara,
como resultado de la interaccin del usuario
con el objeto (ejemplo un botn).
Tambin puede dispararse debido a la ejecucin de cdigo (sentencias), o
como resultado de la interaccin de otro objeto con el objeto de poseedor del
evento (lo entender luego). Para un formulario tenemos por ejemplo; el
evento Load que se dispara cuando se carga el formulario; o el evento Click
para un botn de comando, cuando se hace clic sobre l. Entonces al efectuarse
el evento correspondiente se ejecutar el respectivo cdigo que se coloque en
ese evento.

Cmo puedo crear y programar
una clase java con Eclipse para
nuestra Calculadora en Java
19/06/2013IDE Eclipse, Tutoriales
Hola amigo, hoy vas a aprender con el segundo captulo del curso Tutorial en Java
Programando una calculadora a programar en java con eclipse. Para ello vas a experimentar,
creando tu mismo un paquete y una clase. Despus vers cmo editar su contenido y finalmente
como puedes ejecutarla y ver el resultado mostrado por la salida estndar. Y todo ello sin salir de
la misma ventana. No te parece cmodo y a la vez productivo?.
Configurando la perspectiva Java yPackage
Explorer.
Antes de comenzar a programar es muy interesante buscar la comodidad y eficiencia en el entorno
de trabajo. Eclipse nos ofrece perspectivas (perspectives) y vistas (views) para organizar todas
las herramientas que nos ofrece para desarrollar cdigo. Como nuestra intencin en estos
momentos es crear, programar y ejecutar una clase java, entonces lo que primero que tenemos
que hacer es configurar y abrir aquella perspectiva y vistas que mejor se adapten a nuestras
necesidades.
La perspectiva java es ideal para comenzar a programar nuestras clases y a continuacin te
ofrezco un ejemplo grfico del recorrido que tienes que hacer para poder abrirla.

Una vez que la seleccionamos vers como cambia el layout de eclipse y nos aparecen una
serie de vistas de entre las cuales voy a mencionarte una de ellas, Package Explorer o lo que
es lo mismo, el explorador de paquetes. Para qu nos sirve un explorador de
paquetes?. Sigue leyendo que te lo voy a ir desgranando, paso a paso, a medida que nuestras
necesidades de programacin lo requieran.

Creando un paquete con el Wizard de
Eclipse.
Si ya has programado algo en java posiblemente ya sepas que es un paquete (package). Sin
embargo, es posible que este curso en la nube sea lo primero que ests leyendo sobre java as
que voy a intentar explicrtelo en unas pocas lneas.
Los paquetes son la forma que tiene java deidentificar
unvocamente a cada una de las clases. As es posible que una
clase utilice otras clases con mismo nombre, siempre y cuanto,
pertenezcan a paquetes distintos.

Para tener la certeza de que estamos definiendo un paquete nico lo que suelen hacer todas las
empresas que desarrollan proyectos java es utilizar la misma nomenclatura, en la denominacin de
paquetes, que utilizan con el domino web. Por esta sencilla regla los paquetes que defina en este
manual van a comenzar por com.programarenjava.*. Si te das cuenta, la forma de nombrar los
paquetes es justo la inversa al empleado en la denominacin de dominios (programarenjava.com).
Bien, ahora que ya sabes que es un paquete y cual es la razn principal de su existenciallega
el momento de nos pongamos en marcha y aprendas a crear tu primer paquete utilizando eclipse.
Para ello lo primero que tienes que hacer es situar el ratn sobre la carpeta src dentro del
proyecto Tutorial-Java. Pulsas el botn derecho, pulsas sobre nuevo (new) y en el segundo
men buscas la opcin paquete (package) y presionas sobre ella. Justo en este momento
aparecer una nueva ventana titulada Nuevo Paquete Java (New Java Package).

En este asistente podrs escoger el nombre del paquete y adems te est indicando dnde se va a
almacenar fsicamente. Le das a finalizar y adems de cerrarse la ventana podrs observar que en
el explorador de paquetes ha aparecido un nuevo componente justo debajo del recurso src.


Este paquete va a ser sobre el que creemos la primera clase dentro del proyecto de la Calculadora.
Esto ser en el siguiente apartado, pero antes de seguir me gustara que vieras todo lo que Eclipse
ha estado haciendo por debajo. Tras sus bonitas vistas y sus cmodos asistentes de creacin de
paquetes, clases, interfaces, existen un conjunto de acciones que realizan cambios a nivel de
sistema de ficheros. A continuacin te voy a mostrar como ha quedado nuestro proyecto tras la
creacin del paquetetutoriales.calculadora.
?
1
2
3
4
5
6
7
8
9
10
Tutorial-Calculadora
src
com
programarenjava
tutoriales
calculadora
bin
.classpath
.project
.settings
Como puedes ver eclipse ha construido un rbol de directorios que se corresponde con cada una
de las partes de nuestro paquete. As es como en un futuro otras clases podrn encontrar a cada
una de las que programemos nosotros.
Creando una clase con el Wizard de Eclipse.
Ahora voy a ensearte a crear una clase sobre el paquete que acabamos de definir. Para ello, lo
primero que tienes que hacer es situar el cursor del ratn sobre el paquete (siempre en la
vista Package Explorer). Una vez all pulsa el botn derecho y entonces se te abrir un men.
Aqu tienes que seleccionar nuevo y en el nuevo men lateral buscar y seleccionar la opcin clase
(class). Al hacerlo te aparecer el siguiente asistente (New Java Class)

Antes de que le des a finalizar quiero que te fijes en cada uno de los elementos del asistente.
Ahora te voy a explicar, uno a uno, que significan y que le estn aportando cada uno de ellos al
proceso de creacin de nuestra clase CalculadoraApp.
Directorio Fuente (Source Folder): Como en el asistente de creacin de paquetes, nos est
indicando cual es el directorio raz, a partir del cual, se alojar el fichero con extensin java que
guardar la definicin de nuestra clase.
Paquete (Package): Paquete al que va a pertenecer nuestra clase.
Nombre (Name): Nombre que le vamos a dar a nuestra clase.
Modificadores (Modifiers): Un conjunto de 4 modificadores que nos van a permitir definir el
mbito de nuestra clase (pblica, defecto, privada o protegido combinados con abstracta, final y
esttica). Vas a elegir pblico (public) porque as esta clase ser visible por toda la aplicacin. Si
no tienes claro que es un modificador prometo escribir pronto un artculo donde quede
perfectamente explicado, sin embargo, si te urge dmelo ponindote en contacto conmigo.
Superclase (superclass): An no hemos llegado al capitulo de herencia, as que por ahora
debes quedarte con que con este campo de texto (y su buscador de clases asociado) vas a poder
especificar la clase de la que hereda nuestra clase. Por defecto aparece la
clase java.lang.Object porque, como ya te explicar cuando hablemos de herencia en java, es la
clase de la que heredan el resto de clases del lenguaje.
Interfaces (interfaces): Tampoco hemos llegado an al capitulo de los interfaces, sin embargo,
voy a adelantarte un smil que te ayudar a hacerte una idea de la funcin que ocupan estos
elementos del lenguaje. Todos sabemos que las personas desempean diferentes profesiones,
pero adems son padres, madres, hijos, hermanos, compaeros. Bien, pues java nos permitira
definir a una Persona dentro de una clase y los diferentes roles que est desempea en la
sociedad seran diseados a travs de interfaces. Nosotros ahora no vamos a especificar ningn
interfaz debido a que esta clase va a ser la principal del programa, sin embargo, en futuros
artculos si veremos como una clase que implementa un interfaz est asumiendo la
responsabilidad de ofrecer una solucin a cada uno de los mtodos que la primera declara. (Se
responsabiliza a cumplir el contrato que el interfaz declara).
Construcciones automticas (Which methods stubs would you like to
create?): Aqu vamos a especificar que construcciones nos gustara delegar en eclipse (el
mtodo esttico main, constructores de la superclase y mtodos abstractos heredados). Solo vas
a seleccionar la primera de las opciones porque la clase que estamos creando va a ser la principal
de nuestra calculadora. Las otras dos opciones las dejaremos para el captulo en que te explique
qu es la herencia y cmo puedes aprovechar toda su potencia de reutilizacin de cdigo.
Bien, ahora que ya tienes una comprensin de lo que estamos haciendo, le das a aceptar y ya has
creado tu primera clase en java utilizando el asistente de eclipse. Ahora si miras en el centro
de la pantalla aparece el cdigo fuente de la clase que acabamos de crear.
?
1
2
3
4
5
6
7
8
9
10
11
12
package com.programarenjava.tutoriales.calculadora;

public class CalculadoraApp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

}

}
13
Cosas a destacar de la clase recin creada.
1. La primera sentencia que comienza con la palabra reservada package es donde estamos
indicando que la clase va a estar dentro del
paquetecom.programarenjava.tutoriales.calculadora
2. El mbito de la clase es pblico (palabra reservada public justo antes de class). Esto quiere decir
que nuestra clase ser visible a partir de la direccinpackage+className.
3. Eclipse ha programado, por nosotros, la signatura de un mtodo pblico y esttico llamando main.
Este ser el primer mtodo que ejecute la maquina virtual de java cuando arranque nuestro
programa. El comentario (//TODO) es un aviso que nos hace eclipse indicndonos que el mtodo
est vaco y que somos nosotros los responsables de programarlo para que cumpla con nuestras
necesidades.

Vas a programar las primeras lneas de
cdigo en la clase que acabas de crear.
Ya has creado la clase y ahora es el momento de que nos pongamos a programar sobre ella. El
objetivo es mostrar por pantalla un mensaje de bienvenida con el siguiente aspecto.
?
1
2
3
4
5
6
7
8
9
10
11
*******************************************************
*******************************************************
*** ***
*** ***
*** Bienvenido al Tutorial Online ***
*** ***
*** Programar una Calculadora en Java ***
*** ***
*** ***
*******************************************************
*******************************************************
Aqu lo que estamos haciendo es escribir en la salida estndar. Para ello java nos proporciona una
clase llamada System encargada de encapsular algunas funciones propias del sistema como
son la entrada, y salidas estndar de ejecucin correcta y error. Una posible solucin al
problema planteado te la muestro a continuacin
?
1
2
3
System.out.println("*******************************************************");
System.out.println("*******************************************************");
System.out.println("*** ***");
System.out.println("*** ***");
4
5
6
7
8
9
10
11
System.out.println("*** Bienvenido al Tutorial Online ***");
System.out.println("*** ***");
System.out.println("*** Programar una Calculadora en Java ***");
System.out.println("*** ***");
System.out.println("*** ***");
System.out.println("*******************************************************");
System.out.println("*******************************************************");
Cosas que hemos aprendido con el ejemplo de arriba.
1. Hemos utilizado el mtodo println cuya responsabilidad consiste en escribir en la salida estndar
(out) el String que recibe como parmetro.
2. La clase String permite crear instancias inmutables utilizando los caracteres . Esto como habrs
podido comprobar simplifica mucho la creacin de cadenas de texto, sin embargo, puede tener
efectos inesperados al operar sobre ellas como te mostr en este artculo donde te explicaba
varias formas de comparar Strings en java.
3. Si quieres que la salida sea fiel a lo que te planteaba en el apartado anterior habrs tenido que
crear los espacios en blanco uno a uno y no utilizando el tabulador. Si quieres, prueba a utilizarlo,
vuelve a ejecutar el programa y vers que ocurre.
Aprendiendo a ejecutar nuestra
claseCalculadoraApp como una Java
Application.
Una vez que has terminado de programar el mtodo main, llega el momento de guardar y probar
nuestra clase. Si ya tienes algn conocimiento en java o tienes experiencia en otros lenguajes te
preguntars. Cmo vamos a probar la clase sin compilarla antes?. La respuesta es que
Eclipse se encarga de hacerlo automticamente por nosotros. Internamente cuando hacemos
cambios en la definicin de una clase y guardamos, el Entorno Integrado de Desarrollo se encarga
de lanzar una tarea que invoca a la maquina virtual de java para que compile nuestra clase.
Eclipse le dice a la jdk que debe buscar nuestra clase en
?
1
${WORKSPACE}/Tutorial-
Calculadora/src/com/programarenjava/tutoriales/calculadora/CalculadoraApp.java
E instalar el fichero compilado en el directorio de ejecutables
?
1
${WORKSPACE}/Tutorial-
Calculadora/bin/com/programarenjava/tutoriales/calculadora/CalculadoraApp.class
Una vez que ya tenemos creada la versin compilada de nuestra clase es el momento de que te
muestre como puedes ejecutarla. Para ello vas colocar el ratn sobre la
claseCalculadoraApp.java y vas pulsar el botn derecho. Aqu te aparecer un men y tendrs
que buscar la opcin Ejecutar como (Run as) y dentro de esta configuraciones de ejecucin
(Run Configurations). Si pinchas en el te aparecer un asistente con el siguiente aspecto

Si pulsas en el botn Ejecutar (run) eclipse ejecutar nuestra clase invocando a la JRE que tenga
asignado el proyecto, sin embargo, antes me gustara explicarte las diferentes opciones de
configuracin que nos ofrece el asistente.
Pestaa Main: Caractersticas principales de la ejecucin como la clase que se va a ejecutar y el
proyecto al que pertenece. Con esto eclipse ya puede encontrar el fichero donde buscar el
mtodo main que ser el primero que ejecute la JRE..
Pestaa Arguments: Aqu vas a poder especificar parmetros de configuracin tanto para el
programa como para la maquina virtual que se va a encargar de ejecutarlo.
Pestaa JRE: Desde aqu vas a poder ver y modificar, si fuera necesario, la JRE que ejecutar el
cdigo de la clase CalculadoraApp.
Pestaa Classpath: Nos ofrece un rbol con las diferentes libreras que estn incluidas y que
podr utilizar la JRE cuando se est ejecutando, incluidas las libreras que utiliza la propia JRE
para poder arrancar ella misma.
Pestaa Source: Nos permite visualizar el cdigo fuente (ficheros java) que van a formar parte
de la ejecucin. Todos aquellos ficheros que formen parte de nuestro programa.
Pestaa Environment: Aqu es posible consultar y aadir variables al entorno (por ejemplo una
variable del sistema operativo) sobre el cual se va a ejecutar el programa.
Pestaa Common: En esta parte vamos a poder especificar donde se guardar la configuracin de
la ejecucin Lanzar CalculadoraApp, si deseamos que aparezca entre los favoritos de
ejecuciones y con que codificacin (encoding) deseamos que arranque la JRE.
Supongo que estars pensando que cuanta informacin. No te preocupes, lo importante es que
seas consciente de la existencia de todas estas posibilidades. En la prctica, algunos elementos
como saber con qu JRE se va a ejecutar nuestro programa y cual va a ser encoding con
que arranque la maquina virtual va a ser clave para diferenciarte de muchos programadores que
no le dan importancia a estas cosas hasta que aparecen los problemas.
Al ejecutarse el programa CalculadoraApp eclipse nos abrir una nueva vista (Console View)
y dentro de ella, podremos ver todos los mensajes que hayamos escrito en la salida
estndar. Has conseguido reproducir el resultado que te mostraba unos prrafos mas
arriba?. No me cansar de repetirlo, pero para aprender algo lo mejor es ponerlo en prctica,
cuanto antes mejor, y el nmero de veces que necesites para asimilarlo correctamente.
Hasta aqu el captulo 2 del curso Programando una Calculadora en Java. Espero que hayas
adquirido una buena comprensin de como se crea una clase con eclipse dentro de un paquete
java. Hayas realizado pruebas mostrando mensajes por la salida estndar y sobre todo hayas
comenzado a comprender porque eclipse es un Entorno de Integracin de Desarrollo.
Con la misma herramienta puedes crear, modificar, ejecutar y ver
el resultado de un programa escrito en java. Si aprendes a
utilizarlo bien tu productividad se disparar por las nubes.

Espero que la informacin contenida en este captulo te haya sido de utilidad. Si as lo crees te
agradecera que compartieras esta informacin entre aquellos amigos/compaeros de
trabajo a quienes pienses que les pueda ayudar. Si deseas seguir el curso a travs de tu lector
RSS puedes suscribirte desde aqu. Si tu eres mas de leer el correo electrnico entonces puedes
apuntarte al Newsletter de Programar en Java. Por ultimo, si tienes alguna duda, siempre puedes
dejar tu comentario aqu o ponerte en contacto conmigo.
Prximo capitulo -> Crear un interfaz en Java. Definiendo el contrato de la Calculadora.
Has tenido algn problema a la hora de poner en prctica el captulo de hoy?. Cuntame
como ha sido tu experiencia.

Iniciar otra actividad
En el tema anterior desarrollamos una aplicacin
que muestra una actividad (una sola pantalla) con un campo de
texto y un botn. En este tema, vamos a aadir algo de cdigo
para MainActivity para iniciar una nueva actividad (una nueva
pantalla) cuando el usuariohace clic en el botn Enviar con el
texto que halla escrito en el campo de texto.
Respuesta al botn Enviar
Para responder a un evento click del botn, abrimos el archivo de
diseo activity_main.xmly aadimos
el atributo android:onClick para el elemento <Button>:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
El valor del atributo android:onClick, "sendMessage", es el
nombre de un mtodo en laactividad que el sistema llama cuando
el usuario hace clic en el botn.
Abrimos la clase MainActivity para aadir
el mtodo correspondiente. Para ello, en el proyecto vamos
a src/.../MainActivity.java:
/** Funcin llamada cuando el usuario
pulsa el botn Enviar */
public void sendMessage(View view) {
// Hacer algo en respuesta al botn
}
Cuando estamos escribiendo con Eclipse en Java debemos
pulsar Ctrl + Shift + O para importar las clases que pudieran faltar.
Tambin para forzar una especie de "reconstruir" el proyecto
debemos guardarlo todo con File -> Save All.
Para que el sistema encuentre el mtodo sendMessage() este
debe:
Ser pblico.
Tener un valor de retorno void.
Tener una view como el nico parmetro (esta
ser la view en que se ha hecho clic)
A continuacin, vamos a incluir cdigo en este mtodo para leer
el contenido del campo de texto y entregar ese texto a otra
actividad (otra pantalla).
Construir un Intent
Intent es un objeto que proporciona tiempo de ejecucin
obligatorio entre componentes separados (por ejemplo, dos
actividades). Intent representa en una aplicacin "la intencin de
hacer algo". Podemos utilizar Intent para una amplia variedad de
tareas, pero lo usual es utilizarlo para iniciar otra actividad.
Dentro del mtodo sendMessage(), creamos un Intent, al que
llamaremos intent, para iniciar una nueva actividad que
llamaremos DisplayMessageActivity:

/** Funcin llamada cuando el usuario
pulsa el botn Enviar */
public void sendMessage(View view) {
Intent intent = new Intent(this,
DisplayMessageActivity.class);
}
El constructor utilizado aqu tiene dos parmetros:
Un context como primer parmetro (this se usa
porque la clase Activity es una subclase
de context)
La clase que el sistema debe entregar el Intent,
en este caso, la actividad que se debe
iniciar DisplayMessageActivity.
Nota: La referencia a DisplayMessageActivity generar un error
en Eclipse, porque la clase no existe todava. Ignorar el error,
crearemos la clase mas adelante.

Intent no slo permite iniciar otra actividad, tambin puede pasar
un paquete de datos a la actividad. Esto ser necesario para
paser el texto a la actividad DisplayMessageActivitypara que
pueda mostrarse:

/** Funcin llamada cuando el usuario
pulsa el botn Enviar */
public void sendMessage(View view) {
Intent intent = new Intent(this,
DisplayMessageActivity.class);
EditText editText = (EditText)
findViewById(R.id.edit_message);
String message =
editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE,
message);
}
En primer lugar se utiliza findViewById() para obtener el
elemento EditText y aadir el valor del texto a intent.
Intent puede pasar una coleccin de distintos tipos de datos en
forma de pares clave-valor llamado extras mediante el
mtodo putExtra(), que recibe el nombre de la clave en el primer
parmetro y el valor en el segundo parmetro.
Para que la siguiente actividad pueda consultar los datos
adicionales, se debe definir la clave utilizando una constante
pblica. As que debemos aadir la
definicinEXTRA_MESSAGE en la parte superior de la
clase MainActivity:
...
public class MainActivity extends Activi
ty {


public final static String EXTRA_MESSAGE
= "com.emiliotoboso.SegundaAplicacion.M
ESSAGE";
...
En general es una buena prctica definir las claves para los
extras de Intent utilizando el nombre del paquete de la aplicacin
como prefijo. Esto asegura que sean nicas, en caso de que
nuestra aplicacin interacte con otras aplicaciones.
Comenzar la segunda actividad
Para iniciar una actividad, slo hay que llamar a startActivity() y
pasarle el Intent. El sistema recibe esta llamada e inicia una
instancia de la actividad especificada por el Intent.
Con este nuevo cdigo, este sera el
mtodo sendMessage() completo que se invoca con el botn
Enviar:
/** Funcin llamada cuando el usuario
pulsa el botn Enviar */
public void sendMessage(View view) {
Intent intent = new Intent(this,
DisplayMessageActivity.class);
EditText editText = (EditText)
findViewById(R.id.edit_message);
String message =
editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE,
message);
startActivity(intent);
}
Ahora hay que crear la clase DisplayMessageActivity.
Crear la segunda actividad
Para crear una nueva actividad con Eclipse, haga clic en New
en la barra de herramientas.
En la ventana que aparece, abrimos la carpeta Android y
seleccionamos Android Activity.

Pulsamos en Siguiente.
En el siguiente cuadro de dilogo seleccionamos BlankActivity y
pulsamos Siguiente.

Ahora rellenamos los detalles de la actividad:
Project: SegundaAplicacion
Activity Name (Nombre de la actividad):
DisplayMessageActivity
Layout Name: activity_display_message
Title: Mi mensaje
No marcamos Launcher Activity
Hierachical Parent:
com.emiliotoboso.segundaaplicacion.MainActivity.
Navigation Type: None
Hierachical Parent es opcional, se podra dejar en blanco pero
conviene poner la actividad de la que se viene, la actividad padre
(ver mas adelante, Aadir al manifiesto).
Tras rellenar los datos le damos a Finalizar.
Ahora abrimos el archivo DisplayMessageActivity.java. Al
utilizar Eclipse para crearlo, la clase ya incluye una
implementacin del mtodo onCreate(), que
necesitaremos. Tambin hay una implementacin
del mtodo onCreateOptionsMenu(), pero como no lo vamos
anecesitar para esta aplicacin lo podemos quitar. La clase
debemos dejarla con este aspecto:

public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_display
_message);
}
Todas las subclases de Activity deben implementar el
mtodo onCreate(). El sistema lo llama cuando crea una nueva
instancia de la actividad. Este es el lugar donde debemos definir
la disposicin de la actividad y donde se debe realizar la
configuracin inicial de los componentes de las actividad.
Aadir al manifiesto
Debemos declarar todas las actividades en el archivo de
manifiesto, AndroidManifest.xml, utilizando un
elemento <activity>.
Cuando se utiliza Eclipse se crean las entradas de la actividades
automticamente. Debe tener un aspecto como este:
<application
...
<activity
android:name="com.emiliotoboso.segun
daaplicacion.DisplayMessageActivity"
android:label="@string/title_activit
y_display_message" >
<meta-data
android:name="android.support.PA
RENT_ACTIVITY"
android:value="com.emiliotoboso.
segundaaplicacion.MainActivity" />
</activity>
</application>
El elemento <meta-data> declara el nombre de la
actividad principal de esta actividad dentro de la
jerarqua lgica de la aplicacin. La biblioteca
de soporte Android (Android Support Library) utiliza esta
informacin para poner en prctica comportamientos
predeterminadosde navegacin, como Up navigation.
Nota: Eclipse incluye automticamente la biblioteca Support en
el proyecto de la aplicacin.
La aplicacin es ahora ejecutable porque el Intent en la primera
actividad resuelve la claseDisplayMessageActivity. Si
ejecutamos la aplicacin ahora, al hacer clic en el botn Enviarse
inicia la segunda actividad, pero se sigue utilizando el diseo
predeterminado, "Hello world".
Recibir el Intent
Cada Activity es invocada por un Intent, sin importar cmo el
usuario navega hasta all. Podemos obtener el Intent que inici
una Activity llamando a getIntent() y recuperar los datos
contenidos en el Intent.
En el mtodo onCreate() de la clase DisplayMessageActivity es
donde debemos obtener elIntent y extraer el mensaje entregado
por MainActivity:
El mtodo onCreate() completo
de DisplayMessageActivity debera verse as:
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);

// Extrae el mensaje de la intencin
intent
Intent intent = getIntent();
String message =
intent.getStringExtra(MainActivity.EXTRA
_MESSAGE);

// Crea el texto a visualizar
TextView textView
= new TextView(this);
textView.setTextSize(40);
textView.setText(message);

// Coloca el texto en el diseo de
la actividad
setContentView(textView);
}
Ahora podemos ejecutar la aplicacin. Cuando se abre,
escribimos un mensaje en el campo de texto, hacemos clic en
Enviar y el mensaje aparece en la segunda actividad.


Para un diseo adecuado del software resulta imprescindible una correcta encapsulamiento del cdigo. El mayor problema
reside en que el software tiende a cambiar con mucha facilidad, (siempre encontramos mejores formas de resolver un
problema) y resulta imprescindible que estos cambios afecten lo menos posible a quienes utilizan este software. Pasemos a
definir estos trminos de forma ms precisa.
Cuando diseamos un software hay dos aspectos que resultan fundamentales:
Interface: Cmo este software puede ser utilizado.
Implementacin: El cdigo utilizado para implementar los distintos algoritmos.
El concepto de interfaz se define en Java como los elementos de una clase que son visibles desde fuera de esta. La
implementacin se define creando unos determinados atributos y escribiendo el cdigo de los diferentes mtodos.
El encapsulamiento consiste en ocultar los atributos de un objeto de manera que slo se puede cambiar mediante las
operaciones definidas para ese objeto. Dicho de otra forma, procurar que el interface sea lo ms independiente posible de
la implementacin.
En Java el encapsulamiento est estrechamente relacionado con la visibilidad. Para indicar la visibilidad de un elemento
(tanto atributos como mtodos) podemos anteceder una de las siguientes palabras:
public: accesibles desde cualquier clase.
private: slo son accesibles por la clase actual.
protected: slo por la clase actual, sus descendientes y clases de nuestro paquete.
<si no indicamos nada> slo son accesibles por clases de nuestro paquete.
Acceso a los atributos de la clase
Los atributos de una clase estn estrechamente relacionados con su implementacin. Por esta razn conviene marcarlos
como private e impedir su acceso desde fuera. De esta forma en un futuro podremos cambiar la representacin interna
del objeto sin alterar su interface.
Aunque en la teora esta afirmacin parece lgica en la prctica resulta difcil de seguir. Pensemos en las dos clases que
hemos diseado. En la de los nmeros complejos al haber puesto private en los atributos no vamos a permitir que
acceder la parte entera e imaginaria del objeto. Lo mismo ocurre con la longitud y latitud de una coordenada geogrfica.
Por lo tanto, resulta imposible consultar o modificar esta informacin una vez creado el objeto.
Para solucionar este problema vamos a utilizar los mtodos getters y setters (obtencin y establecimiento). Resulta tan
frecuente su utilizacin que Eclipse incorpora una herramienta para crearlos de forma automtica. Realiza el siguiente
ejercicio para comprendes su funcionamiento:
Ejercicio paso a paso: Creacin automticas de getters y setters
1. En el Explorador de paquetes dentro del proyecto Complejos, abre la clase Complejo.java
2. Sita el cursor justo antes de la ltima llave (}) .
3. Pulsa con el botn derecho y selecciona la opcin Cdigo fuente/ Generar mtodos obtencin y
establecimiento...
4. Pula el botn Seleccionar todo y luego Aceptar. Vers cmo se inserta el siguiente cdigo:

public double getReal() {
return real;
}

public void setReal(double real) {
this.real = real;
}

public double getImaginario() {
return imaginario;
}

public void setImaginario(double imaginario) {
this.imaginario = imaginario;
}

5. Pulsa en el botn Guardar para almacenar el fichero.
Practica: Getters y setters en la clase coordenadas geogrficas
Inserta en la clase GeoPunto los getters y setters necesarios para acceder a sus atributos.
Cambio de la representacin interna de una clase
Tras insertar los cuatro mtodos del ejercicio anterior, uno podra pensar que el resultado es el mismo que si hubiramos
puesto public delante de los dos atributos. No es exactamente as, imaginemos que ms adelante queremos verificar que
la latitud de un GeoPunto est en el rango [-90, 90], y en caso contrario lanzar una excepcin. Si los usuarios de la clase
acceden directamente al atributo esto no ser posible. Ms todava, imagina que en un momento determinado queremos
cambiar la representacin interna de un nmero complejo para utilizar mdulo y fase en lugar de parte entera y parte
imaginaria. Si hemos tenido la precaucin de no publicar los atributos, ser posible realizar este cambio sin cambiar el
interface de la clase.

class Complejo {
//declaracin de atributos
private double modulo, fase;

//declaracin de constructor
public Complejo(double real, double imaginario) {
modulo = Math.hypot(real, imaginario);
fase = Math.atan2(imaginario, real);
}

//declaracin de mtodos
public double getReal() {
return modulo * Math.cos(fase);
}

Si quieres puedes ver el ejemplo completo de cmo se podra implementar esta clase en el siguientefichero.
Practica: Cambio de representacin de la clase coordenadas geogrficas
Modifica la clase GeoPunto para que los atributos longitud, latitud sean representados mediante unint en lugar de
con double. Para disponer de una precisin adecuada ahora representarn millonsimas de grado en lugar de grados. De
esta forma tenemos una representacin ms compacta. Como veremos ms adelante esta representacin es la utilizadada
en el API de Google Maps. IMPORTANTE, el interfaz de la clase ha de permanecer exactamente igual. Para el
constructor puedes utilizar el siguiente cdigo.
public GeoPunto(double longitud, double latitud) {
this.longitud = (int) (longitud * 1E6);
this.latitud = (int) (latitud * 1E6);
}
http://www.androidcurso.com/index.php/tutoriales-android/32-unidad-2-diseno-de-la-interfaz-de-usuario-
vistas-y-layouts
Jesus Tomas

Archive for the Android Category
Animacin


En la entrada anterior se vio como mostrar una imagen usando la clase SurfaceView, para crear una animacin con esa imagen es
necesario dibujarla constantemente en una nueva posicin logrando el efecto visual del movimiento.
GameLoopThread
Para esto se crea la clase GameLoopThread que realiza el trabajo de mostrar la imagen repetidas veces.

package com.test.video.game;

import android.graphics.Canvas;

public class GameLoopThread extends Thread {
static final long FPS = 10;
private GameView view;
private boolean running = false;

public GameLoopThread(GameView view) {
this.view = view;
}

public void setRunning(boolean run) {
running = run;
}

@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;

while (running) {
Canvas canvas = null;
startTime = System.currentTimeMillis();
try {
canvas = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(canvas);
}
} finally {
if (canvas != null) {

view.getHolder().unlockCanvasAndPost(canvas);
}
}
sleepTime = ticksPS - System.currentTimeMillis() -
startTime;
try {
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {

}

}
}

}

Esta clase extiende de la clase Thread que permite ejecutar el loop en un thread (proceso) independiente al thread del usuario.
La variable de clase FPS contiene la cantidad de cuadros por segundo.
static final long FPS = 10;
La variable de instancia view es una instancia de la clase GameView la cual se usara para dibujar.
private GameView view;
La variable de instancia running se usa para iniciar o deterner el bucle principal.
private boolean running = false;
El constructor inicializa la variable view con la view pasada a la clase como parmetro.

public GameLoopThread(GameView view) {
this.view = view;
}
El mtodo setRunning establece el valor de la variable running que sera usada en el while.

public void setRunning(boolean run) {
running = run;
}
Sobrescribimos el mtodo run() de la clase Thread.
Las variables ticksPS, startTime y sleepTime son para el manejo del delta time que se utiliza para mostrar la misma cantidad de
cuadros por segundo.

@Override
public void run() {
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
La variable tickPS contiene el tiempo que debe durar cada vuelta del bucle para mostrar una determinada cantidad de cuadros por
segundo.
En este caso el valor de ticksPS es el de 1000 milisegundos ( 1 segundo ) dividido FPS ( 10 cuadros ), este valor es de 100
milisegundos que es lo que debe durar cada vuelta del bucle para mostrar 10 cuadros por segundo.
La variable startTime contiene el tiempo inicial y la variable sleepTime contiene el tiempo que se debe dormir en cada vuelta para
que dure 100 milisegundos.
A continuacin el bucle principal, si running es true se crea un objeto Canvas, se toma el tiempo inicial y dentro de un bloque try le
pasamos al canvas el Holder y blockeamos la View, luego colocamos el metodo onDraw() en un bloque synchronized para evitar
que otros procesos llamen al mtodo onDraw() mientras nosotros lo usamos, finally asegura
queunLoockCanvasAndPost (desbloquea el Canvas para poder dibujarlo) se ejecute si es posible aunque all un error.

while (running) {
Canvas canvas = null;
startTime = System.currentTimeMillis();
try {
canvas = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(canvas);
}
} finally {
if (canvas != null) {

view.getHolder().unlockCanvasAndPost(canvas);
}
}
Se calcula el tiempo a dormir, que es el resultado de ticksPS ( 100 milisegundos ) menos el tiempo inicial menos el tiempo actual, si
este es mayor que 0 se duerme el valor de sleepTime si no se duerme 10 milisegundos.

sleepTime = ticksPS - System.currentTimeMillis() - startTime;
try {
if (sleepTime > 0) sleep(sleepTime); else sleep(10);
} catch (Exception e) { }
GameView
Esta es la clase GameView.

package com.test.video.game;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameView extends SurfaceView implements
SurfaceHolder.Callback {
private Bitmap bmp;
private int width, height;
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private int x = 0;
private int xSpeed = 1;

public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
getHolder().addCallback(this);

bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.android);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int
width,
int height) {
this.width = width;
this.height = height;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {

}
}
}

@Override
protected void onDraw(Canvas canvas) {
if (x == getWidth() - bmp.getWidth())
xSpeed = -1;

if (x == 0)
xSpeed = 1;

x = x + xSpeed;
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bmp, x, 10, null);
}

}

Esta clase fue explicada en la entrada anterior, los cambios que se realizaron para la animacin son:
Crear una instancia de la clase GameLoopThread.
private GameLoopThread gameLoopThread;
Agregar la variable de intancia x que es el valor del eje x.
private int x = 0;
Agregar la variable de instancia xSpeed que es la cantidad de pixeles que se mueve la imagen sobre el eje x.
private int xSpeed = 1;
Se usa una nueva imagen que esta guarda el la carpeta drawable que debera ser creada dentro de la carpeta res.
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.android);
En el mtodo surfaceCreated(), se establece con el valor true la variable running de la clase GameLoopThread y se inicia el bucle
en el mtodo run().

@Override
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
En el mtodo surfaceDestroyed(), se establece la variable running como false para detener el bucle y se prueba de detener el
proceso de la clase GameLoopThread.

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {

}
}
}
En el mtodo onDraw() se modifica el valor de x para producir el movimiento.
Se evala el valor de x, si es igual al ancho de la pantalla menos el ancho de la imagen el valor xSpeed es negativo si no es positivo
y se le suma a x el valor de xSpeed, despus se dibuja el bitmap.

@Override
protected void onDraw(Canvas canvas) {
if (x == getWidth() - bmp.getWidth())
xSpeed = -1;

if (x == 0)
xSpeed = 1;

x = x + xSpeed;
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(bmp, x, 10, null);
}
GameActivity
La clase GameActivity() permanece igual al ejemplo anterior.

package com.test.video.game;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class GameActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new GameView(this));
}
}

Con esto se logra que una imagen se mueva rebotando de un borde al otro de la pantalla, en el video se observa el rendimiento de
la aplicacin en un telfono real que es superior al emulador de android donde la imagen no tiene tanta fluidez en el movimiento.

Para descargar el cdigo completo como proyecto Eclipse pulsar aqu.
2012
07/13
Categora
Android
Deja un comentario
SurfaceView

La clase SurfaceView proporciona un modo ms directo de renderizar las cosas en pantalla.
Se trata de una View que contiene una Surface que es un buffer crudo que es usado por el screen compositor que se encarga de
renderizar todo en Android.
En el siguiente ejemplo se muestra una imagen a travs de la clase SurfaceView:
Se crea la Activity principal.

public class Game extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
}
En la Activity le pasamos al mtodo setContentView() un objeto de la clase GameView que es la que se encarga del todo el trabajo.
setContentView(new GameView(this));
Se crea la clase GameView.

public class GameView extends SurfaceView implements
SurfaceHolder.Callback {

private Bitmap bmp;
private int width, height;
private SurfaceHolder holder;

public GameView(Context context) {
super(context);
getHolder().addCallback(this);
bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.icon);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int
width,
int height) {
this.width = width;
this.height = height;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas c = holder.lockCanvas(null);
onDraw(c);
holder.unlockCanvasAndPost(c);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 10, 10, null);
}

}
La clase GameView hereda de SurfaceView e implementa SurfaceHolder.callback para usar los mtodos de esta ltima interfaz:

public class GameView extends SurfaceView implements
SurfaceHolder.Callback {
No se puede manejar directamente el objeto Surface, se debe hacer a travs de unSurfaceHolder (un contenedor) que se consigue
llamando en el constructor de la clase a getHolder() e indicar que SurfaceHolder va a recibir las llamadas
del SurfaceHolder.callback:

getHolder().addCallback(this);
Las siguiente tres funciones son propias del interfaz SurfaceHolder.Callback y se llaman en caso de que cambie el tamao de la
pantalla (por ejemplo al girar el telfono), al crear laView y cuando se cierra.
La primera actualiza los atributos de ancho y alto de la pantalla

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int
width,
int height) {
this.width = width;
this.height = height;
}
La segunda crea la View, lockCanvas bloquea el canvas para el renderizado se la dibuja elcanvas y luego se lo pasamos
a unlockCanvasAndPost que desbloquea la surface y muestra por pantalla lo que hemos dibujado.

@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas c = holder.lockCanvas(null);
onDraw(c);
holder.unlockCanvasAndPost(c);
}
La tercera se usa para cerrar la pantalla:

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}
Sobrescribimos el mtodo onDraw() para que dibuje la imagen en la pantalla:

@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 10, 10, null);
}

Se ha conseguido un renderizado continuo en pantalla, pero la imagen permanece fija porque los valores de la coordenada x, y en
canvas.drawBitmap(bmp, 10, 10, null) en el mtodo onDraw() son siempre los mismos (10) entonces se dibuja siempre en el mismo
lugar.
En la siguiente entrada se implementa un bucle que maneja estos valores para producir el movimiento de la imagen.
Para descargar el cdigo completo como proyecto Eclipse pulsar aqu.
2011
08/22
Categora
Android
16 comentarios
Imagen y Grficos

En Android la pantalla est ocupada por una actividad que cuenta con una vista que contiene un lienzo. Usted tiene la oportunidad
de aprovechar el lienzo sobrescribiendo el mtodo View.onDraw() . El nico parmetro para onDraw() es un lienzo en el que se
pueda dibujar.
Esta es una forma de mostrar una imagen y dibujar grficos en la pantalla.

public class Graphics extends Activity {
/** LLama a la actividad una vez creada. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(new GraphicsView(this));

}

public class GraphicsView extends View {

private Paint paint;
private Bitmap mBitmap;

public GraphicsView(Context context) {
super(context);

mBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.icon);

}

@Override
protected void onDraw(Canvas canvas) {

paint = new Paint();
paint.setColor(Color.GREEN);
int x = (getWidth() / 2) - (mBitmap.getWidth() / 2);
int y = (getHeight() / 2) - (mBitmap.getHeight() / 2);

canvas.drawLine(40, getHeight() / 2, getWidth() - 40,
getHeight() / 2,
paint);

paint.setColor(Color.LTGRAY);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 40,
paint);

canvas.drawBitmap(mBitmap, x, y, null);


paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLUE);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 100,
paint);

Rect rect1 = new Rect(40, 40, 100, getHeight() / 2 - 20);

Rect rect2 = new Rect(getWidth() - 40 - 60, getHeight() /
2 + 20,
getWidth() - 40, getHeight() - 40);

paint.setColor(Color.MAGENTA);
canvas.drawRect(rect1, paint);
canvas.drawRect(rect2, paint);

}

En la Activity Graphics, setContentView() toma como parmetro un objeto de la clase GraphicsView.

setContentView(new GraphicsView(this));
En la clase GraphicView sobrescribimos el mtodo onDraw() con un Cambas como argumento.

@Override
protected void onDraw(Canvas canvas) { }
Un Cambas es un lienzo que nos permite dibujar figuras o una imagen.
Para dibujar el Cambas toma generalmente como parmetros las coordenadas x, y ms un objeto de la clase Paint. La clase Paint
mantiene el estilo, color y otra informacin necesaria para dibujar grficos como mapa de bits (bitmap), texto y figuras geomtricas.
A modo de prueba en vez de usar para las coordenadas x, y valores enteros le paso valores fraccionarios del ancho y el alto para
mantener la composicin dentro de la pantalla tanto en la posicin vertical como horizontal.
Se crea un objeto de la clase Paint para pasarle al Canvas.

private Paint paint;
paint = new Paint();
paint.setColor(Color.GREEN);
Para dibujar una lnea se toma los valores de las coordenadas del punto inicial y del punto final de la recta ms un objeto Paint.

canvas.drawLine(40, getHeight() / 2, getWidth() - 40, getHeight() / 2,
paint);
Para dibujar un circulo los valores de las coordenadas x, y representan el centro, despus el valor del radio y un objeto Paint, por
defecto el circulo se dibuja relleno.

paint.setColor(Color.LTGRAY);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 40, paint);
Para mostrar una imagen primero se crea un campo del tipo Bitmap, se inicializa en el constructor de la clase y luego se dibuja con
el Canvas.

private Bitmap mBitmap;
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
canvas.drawBitmap(mBitmap, x, y, null);
Con esto cambio el estilo del objeto Paint para que la figura no sea rellena.

paint.setStyle(Paint.Style.STROKE);
Con setColor() se establece el color del objeto Paint.

paint.setColor(Color.BLUE);
Para dibujar un rectngulo primero se crea un objeto Rect para usarlo en el Canvas.
Los valores x, y son la esquina superior derecha y el otros par de valores x, y son la esquina inferior izquierda.

Rect rect1 = new Rect(40, 40, 100, getHeight() / 2 20);
Despus se llama a canvas.drawRect() con los objetos Rect y Paint como argumento.

canvas.drawRect(rect1, paint);


2011
07/29
Categora
Android
Deja un comentario
Mostrar Imgen
Interesado en el desarrollo de juegos en Android empec a
estudiar esta plataforma.
Para programar en Android es necesario instalar Java, android-sdk y Eclipse, si no sabes como hacerlo podes recurrir a la
documentacin oficial, tambin aqu hay un video en espaol que lo explica muy bien como hacerlo.
Empec a leer sobre como dibujar imgenes, segn dice la documentacin oficial Android provee la biblioteca de grficos 2D para
dibujar y animar forma imgenes personalizadas. Los paquetes android.graphics.drawable y android.view.animation es donde se
encuentran las clases ms comunes que se utilizan para dibujar y animar en dos dimensin.
Para dibujar grficos en aplicaciones android se puede utilizar objetos Drawable un par de subclases de Drawable para crear
animaciones que puedan (moverse, girar rotar) un solo grfico la animacin de una serie de grficos (como una pelcula).
Los Drawables son todo aquello que se puede dibujar en una View (vista), es la clase de la cual heredan una variedad de tipos de
grficos, incluyendo BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable y otros. Hay tres maneras distintas de
instanciar una clase Drawable.
- Utilizar una imagen almacenada en el directorio de recursos de nuestro proyecto.
- Utilizar un XML que define las propiedades del objeto para luego poder recuperarlo mediante getDrawable() y el ID que se le
asign en el XML.
- Utilizando los constructores propios de la clase.
____________________________________________________________
Creacin de imgenes desde recursos
Una forma sencilla de agregar grficos a su aplicacin es por referencia a una imagen desde los recursos de su proyecto.
Los tipos de archivos soportados son PNG (preferidos), JPG (aceptables) y GIF (todos) .
Esta tcnica, obviamente, sera preferible para los iconos, logotipos u otros grficos como los utilizados en un juego.
Para utilizar un recurso de imagen, basta con aadir el archivo al directorio /res/drawable/ de su proyecto. Desde all se puede hacer
referencia desde el cdigo o desde el Diseo XML.
De cualquier manera, se hace referencia mediante un identificador de recursos (id), que es el nombre del archivo sin la extensin
del tipo de archivo (por ejemplo my_image.png se referencia como my_image).
Cdigo de ejemplo
El siguiente fragmento de cdigo muestra como crear una ImageView que utiliza la imagen de los recursos drawable y la agrega al
diseo.
public class AgregarImagen extends Activity {
/** inicia la actividad una vez creada. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Crear un LinealLayout en el que se agrega la ImageView
LinearLayout mLinearLayout = new LinearLayout(this);

// Instanciar una ImageView y definir sus propiedades
ImageView i = new ImageView(this);
i.setImageResource(R.drawable.images);
i.setAdjustViewBounds(true); // establecer los limites de
ImageView
// con las dimensiones disponibles

i.setLayoutParams(new
Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));

// Agregar la ImageView al diseo y definir el diseo como
el contenido
// de la vista
mLinearLayout.addView(i);
setContentView(mLinearLayout);

}
}
Dentro del mtodo onCreate que inicia la actividad se crea el campo mLinearLayout que hace referencia a un LinearLayout que es
un contenedor de widgets que los muestra alineados horizontal o verticalmente.
Se crea el objeto i de la clase ImageView que hace referencia al padre View, ImageView permite cargar imagenes desde recursos
externos calcular su tamao y mostrarla en una vista, se busca la imagen guardada en R.drawable, se ajusta a las dimensiones
disponibles, se establece los parmetros de diseo con un objeto Gallery para que la imagen ocupe solo el espacio necesario para
mostrar su contenido .
Se agrega la imagen al diseo y se muestra el diseo en la vista.


public int edad(String fecha_nac) { //fecha_nac debe tener el formato dd/MM/yyyy

Date fechaActual = new Date();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String hoy = formato.format(fechaActual);
String[] dat1 = fecha_nac.split("/");
String[] dat2 = hoy.split("/");
int anos = Integer.parseInt(dat2[2]) - Integer.parseInt(dat1[2]);
int mes = Integer.parseInt(dat2[1]) - Integer.parseInt(dat1[1]);
if (mes < 0) {
anos = anos - 1;
} else if (mes == 0) {
int dia = Integer.parseInt(dat2[0]) - Integer.parseInt(dat1[0]);
if (dia > 0) {
anos = anos - 1;
}
}
return anos;
}

Potrebbero piacerti anche