Android Colision. Manifiesto

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Android Colision. Manifiesto"

Transcripción

1 Android Colision En este tutorial aprenderemos a manejar colisiones entre objetos, implementar listas encadenadas para manejar colecciones de objetos y también implementaremos la clase MediaPlayer la cual nos será de utilidad para reproducir vía streaming archivos de audio. La aplicación mostrará en pantalla un elefante que se desplaza a través de ella y cuya dirección de desplazamiento podemos modificar al tocar la pantalla del dispositivo. Se muestran también tres ratones que persiguen al elefante y al colisionar con el lo envían de vuelta a su posición inicial. Para este tutorial tomamos como base el tutorial anterior por lo cual puedes crear un proyecto nuevo o seguir trabajando sobre el proyecto creado en el tutorial anterior. Si vas a crear un proyecto nuevo crea uno para la plataforma 2.2 y nombra a la Actividad principal TutorialElefanteColision. La única clase que permanece exactamente igual que en los tutoriales anteriores es la clase Animacion por lo cual puedes copiarla tal cual para agregarla al nuevo proyecto. Manifiesto Esta aplicación no ocupará algún requerimiento adicional a los que hemos utilizado en los tutoriales anteriores, por lo cual el manifiesto debe quedar exactamente igual que los anteriores con la única excepción del nombre de la Actividad en caso de que hayas creado una nueva. <?xml version="1.0" encoding="utf- 8"?> <manifest xmlns:android=" package="com.jcj.testelefante" android:versioncode="1" android:versionname="1.0" android:installlocation="preferexternal"> <application android:label="@string/app_name" android:icon="@drawable/icon" android:debuggable="true"> <activity android:name="tutorialelefantecolision" android:label="@string/app_name" android:configchanges="keyboard keyboardhidden orientation" android:screenorientation="portrait"> <intent- filter> <action android:name= "android.intent.action.main" /> <category android:name= "android.intent.category.launcher" /> </intent- filter> </activity> </application> <uses- permission android:name="android.permission.wake_lock"/> <uses- permission android:name=

2 "android.permission.write_external_storage"/> <uses- sdk android:minsdkversion="3" android:targetsdkversion="8"/> </manifest> En la descripción de este tutorial se menciona que la aplicación desplegará el elefante con el cual hemos estado trabajando, sin embargo se menciona también que se mostrarán tres ratones que perseguirán al elefante. Esto quiere decir que adicionalmente a nuestra clase Elefante crearemos una clase adicional para los ratones, la clase Raton. Ambas clases tendrán características similares: dirección, posición en x y y, una animación y un rectángulo el cual nos ayudará a determinar si los objetos colisionan entre sí. Dado a que ambas clases compartirán las mismas características, crearemos una clase adicional, la clase Animal, de la cual las clases Elefante y Raton heredarán sus atributos. Dentro del paquete donde se encuentra la Actividad agregamos tres nuevas clases de Java, una para la clase Animal, otra para la clase Elefante y una última para la clase Raton. Clase Animal La clase Animal incluye cinco miembros para el manejo de la posición en los ejes x y y, la dirección del movimiento, la animación del animal y un rectángulo para detectar colisiones. Adicionalmente la clase cuenta con cuatro constantes que nos ayudan a definir la dirección de movimiento de los objetos. Iniciamos importando las clases requeridas por la clase Animal y definiendo a la misma y a los miembros y constantes que la componen. import android.graphics.rect; public class Animal { //Dirección del Animal, Izquierda public static final int LEFT = 1; //Dirección del Animal, Derecha public static final int RIGHT = 2; //Dirección del Animal, Arriba public static final int UP = 3; //Dirección del Animal, Abajo public static final int DOWN = 4; //Posición del Animal public int x, y; //Dirección actual del Animal public int dir; //Rectángulo que contiene al Animal public Rect rectangulo; //Animación del Animal public Animacion animacion; Las constantes LEFT, RIGHT, UP y DOWN ayudan a determinar la dirección de movimiento del objeto Animal. Los miembros x y y guardan la posición del

3 objeto Animal mientras que dir guarda la dirección en la cual se mueve el objeto Animal. El miembro rectangulo de la clase Rect define un rectángulo que contiene al objeto. La clase Rect contiene el método intersect() el cual nos ayuda con el manejo de colisiones entre dos objetos ya que detecta cuando dos objetos de la clase se intersectan. El miembro animacion de la clase Animacion guarda la animación del objeto. La clase Animal esta compuesta por dos métodos, el método constructor de la clase y el método getrectangulo(). En el método constructor de la clase se reciben como parámetros los valores para la posición en x y y y la animación del objeto y se asignan a los miembros correspondientes. El método getrectangulo() regresa un objeto de la clase Rect el cual define el rectángulo que contiene al objeto en la posición actual. / Método constructor de la clase x es la posición en X del y es la posición en Y del animacion es la animación del Animal / public Animal(int x, int y, Animacion animacion) { this.x = x; this.y = y; this.animacion = animacion; / Método getrectangulo Retorna el rectángulo que contiene al objeto Animal en la posición Regresa un objeto Rect con el rectángulo del Animal / public Rect getrectangulo() { rectangulo = new Rect(x, y, x + animacion.getcuadro().getwidth(), y + animacion.getcuadro().getheight()); return rectangulo; Clase Elefante y Clase Raton Las clases Elefante y Raton heredarán sus atributos de la clase Animal así que ambas únicamente se componen por un método constructor que manda a llamar al constructor de la clase Animal. Adicionalmente, dentro del método constructor, la clase Elefante define un valor por defecto para la dirección del objeto.

4 Clase Elefante public class Elefante extends Animal { / Método constructor de la clase Elefante Sobrescribe el método constructor de la clase Animal y asigna el valor RIGHT por defecto a la dirección del x es la posición en X del y es la posición en Y del animacion es la animación del Elefante / public Elefante(int x, int y, Animacion animacion) { super(x, y, animacion); dir = RIGHT; Clase Raton public class Raton extends Animal { / Método constructor de la clase Raton Sobrescribe el método constructor de la clase x es la posición en X del y es la posición en Y del animacion es la animación del Raton / public Raton(int x, int y, Animacion animacion) { super(x, y, animacion); Actividad TutorialElefanteColision Uno de los principales puntos a destacar para este tutorial es la implementación de la clase MediaPlayer que utilizaremos para la reproducción del sonido de fondo de la aplicación vía streaming. Otros puntos son el uso de listas encadenadas, que en este caso en particular utilizaremos para manejar los objetos de la clase Raton, y la implementación de la clase Rect para el manejo de colisiones entre objetos. Volviendo a la clase MediaPlayer, anteriormente en el tutorial Animación en Android empezamos a trabajar con la reproducción de archivos de sonido cortos que podemos cargar sin problema a la memoria mediante la implementación de

5 clase SoundPool, sin embargo, debido a que buscamos optimizar el uso de la memoria necesitamos implementar otros recursos para reproducir archivos de sonido más largos sin saturar la memoria de provocando que la aplicación se vuelva lenta en ejecución. Aquí es donde entra la clase MediaPlayer que es una herramienta que nos permite reproducir los archivos de audio mediante un stream. Iniciamos nuestra Actividad importando las clases que estaremos implementando así como también por la definición de la misma y de sus miembros. import android.app.activity; import android.content.context; import android.content.res.assetfiledescriptor; import android.content.res.assetmanager; import android.graphics.bitmap; import android.graphics.bitmap.config; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.rect; import android.media.audiomanager; import android.media.mediaplayer; import android.media.soundpool; import android.os.bundle; import android.os.powermanager; import android.os.powermanager.wakelock; import android.view.motionevent; import android.view.surfaceholder; import android.view.surfaceview; import android.view.view; import android.view.view.ontouchlistener; import android.view.window; import android.view.windowmanager; import java.io.ioexception; import java.io.inputstream; import java.util.linkedlist; public class TutorialElefanteColision extends Activity implements OnTouchListener { //Vista de la Actividad RenderView renderview; //Candado para evitar que el dispositivo duerma WakeLock wakelock; //Objeto Elefante Elefante elefante; //Lista encadenada de objetos Raton LinkedList<Raton> ratones; //Animación del elefante

6 Animacion elefanteanim; //Animación de los ratones Animacion ratonanim; //Colección de sonidos SoundPool pool; //Reproductor de multimedia MediaPlayer mediaplayer; //Identificador de sonido del elefante int elefanteid = - 1; //Identificador de sonido de los ratones int ratonid = - 1; //Identificador de sonido de explosión int explisionid = - 1; //Posición x y y de los ratones int xr, yr; //Objetos Bitmap para el manejo de imágenes Bitmap cuadro, framebuffer; //Escala en x y y float scalex, scaley; El miembro renderview de la clase RenderView es la vista con la cual estaremos trabajando en la Actividad. El miembro wakelock de la clase WakeLock nos ayudará a configurar el dispositivo para evitar que este entre en estado de reposo después de cierto tiempo. Los miembros elefante y ratones se integran con los miembros elefanteanim y ratonanim respectivamente para crear el elefante y los ratones que se mostrarán en la pantalla. El miembro elefante es un objeto de la clase Elefante mientras que ratones es una lista encadenada de objetos Raton. El miembro pool de la clase SoundPool es una colección de sonidos donde incluiremos los efectos de sonido que incluiremos en la aplicación. Utilizamos el miembro mediaplayer de la clase MediaPlayer para reproducir el sonido de fondo que se escuchará mientras la aplicación esta en ejecución. Los miembros elefanteid, ratonid y explosionid nos ayudan a identificar cada uno de los efectos de sonido para reproducirlos. Los miembros enteros de xr y yr serán utilizados para determinar la posición de los ratones en la pantalla. Los dos miembros de la clase Bitmap, cuadro y framebuffer nos ayudarán con el manejo de los gráficos en la aplicación; cuadro nos servirá de apoyo para cargar las imágenes de los cuadros de la animación del elefante mientras que framebuffer es un buffer virtual donde dibujamos los elementos de la aplicación para posteriormente proyectarlos a la pantalla. Finalmente Los miembros scalex y scaley nos ayudarán a calcular la escala que se aplique a cada uno de los ejes. / Método oncreate sobrescrito de la clase Activity Llamado cuando la Actividad se crea por primera vez, en este se realiza la configuración de la savedinstancestate es el estado de la última ejecución de la

7 Actividad public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //Configuración para pantalla en fullscreen requestwindowfeature(window.feature_no_title); getwindow().setflags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //Ancho del buffer int framebufferwidth = 320; //Alto del buffer int framebufferheight = 480; //Crea el buffer framebuffer = Bitmap.createBitmap(frameBufferWidth, framebufferheight, Config.RGB_565); //Escala en x basada en el ancho del buffer y el ancho de la //pantalla del dispositivo scalex = (float) framebufferwidth / getwindowmanager().getdefaultdisplay().getwidth(); //Escala en y basada en el alto del buffer y el alto de la pantalla del //dispositivo. scaley = (float) framebufferheight / getwindowmanager(). getdefaultdisplay().getheight(); //Evita que el dispositivo se duerma PowerManager powermanager = (PowerManager) getsystemservice(context.power_service); wakelock = powermanager.newwakelock( PowerManager.FULL_WAKE_LOCK, Test ); //Establece el control del volumen del sonido setvolumecontrolstream(audiomanager.stream_music); //Crea una colección de sonidos para reproducir pool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); //Crea un nuevo reproductor de multimedia para reproducir //audio vía streaming mediaplayer = new MediaPlayer(); //Crea un nuevo objeto Animacion para la animación del elefante elefanteanim = new Animacion(); //Crea un nuevo objeto Animacion para la animación de los

8 //ratones ratonanim = new Animacion(); try { //Crea un administrador de contenidos para cargar los //contenidos AssetManager assetmanager = getassets(); //Descriptor para cargar los archivos de sonido AssetFileDescriptor descriptor; //Carga el archivo de sonido del elefante descriptor = assetmanager.openfd( Sounds/Fx/elefante.ogg ); //Agrega el efecto de sonido del elefante a la colección de //sonidos elefanteid = pool.load(descriptor, 1); //Carga el archivo de sonido del ratón descriptor = assetmanager.openfd( Sounds/Fx/raton.ogg ); //Agrega el efecto de sonido del ratón a la colección de //sonidos ratonid = pool.load(descriptor, 1); //Carga el archivo de sonido de la explosión descriptor = assetmanager.openfd( Sounds/Fx/explosion.ogg ); //Agrega el efecto de sonido de la explosión a la colección //de sonidos explosionid = pool.load(descriptor, 1); //Carga el audio para la música de fondo descriptor = assetmanager.openfd( Sounds/Tracks/happy.ogg ); //Asigna el archivo de audio al reproductor de multimedia mediaplayer.setdatasource(descriptor.getfiledescriptor(), descriptor.getstartoffset(), descriptor.getlength()); //Verifica que el archivo de sonido pueda ser reproducido mediaplayer.prepare(); //Se cicla la reproducción del archivo de sonido mediaplayer.setlooping(true); InputStream is; //Carga las imágenes de la animación del elefante for (int i = 0; i < 6; i++) { //Carga la imagen is = assetmanager.open( Images/Elefante/ + i +.png ); cuadro = BitmapFactory.decodeStream(is); is.close(); //Agrega la imagen a la animación

9 elefanteanim.sumacuadro(cuadro, 0.1f); //Carga las imágenes de la animación de los ratones for (int i = 0; i < 12; i++) { //Carga la imagen is = assetmanager.open( Images/Raton/ + i +.png ); cuadro = BitmapFactory.decodeStream(is); is.close(); //Agrega la imagen a la animación ratonanim.sumacuadro(cuadro, 0.1f); catch (IOException e) { // //Crea un nuevo objeto Elefante elefante = new Elefante(frameBufferWidth / 2 elefanteanim.getcuadro().getwidth() / 2, framebufferheight / 2 elefanteanim.getcuadro().getheight() / 2, elefanteanim); //Crea la lista de objetos Raton ratones = new LinkedList<Raton>(); //Crea tres objetos Raton for (int i = 0; i < 3; i++) { //Asigna una posición al azar para el objeto Raton xr = (int) (Math.random() framebufferwidth) ratonanim.getcuadro().getwidth(); yr = (int) (Math.random() framebufferheight) ratonanim.getcuadro().getheight(); //Añade el objeto Raton a la lista ratones.add(new Raton(xR, yr, ratonanim)); //Crea y establece la vista de la Actividad y establece un //OnTouchListener para esta renderview = new RenderView(this); renderview.setontouchlistener(this); setcontentview(renderview); El método oncreate inicia realizando la configuración de la pantalla para visualizarla en fullscreen, determina también las dimensiones del buffer que utilizaremos para desplegar los elementos de la aplicación y calcula la escala en x

10 y en y en base a las dimensiones de la pantalla del dispositivo y las dimensiones del buffer. Así mismo, configuramos la Actividad para que el dispositivo no entre en reposo y controle el volumen del sonido. Se crean una colección de sonidos, una reproductor de multimedia (pool y mediaplayer) para cargar los efectos de sonido y las música de fondo respectivamente. Se crean también dos objetos de la clase Animacion para las animaciones del elefante y el ratón. Cargamos todos los recursos (audio y gráficos) y posteriormente se crean el elefante y los ratones de la aplicación, Por último, se crea la vista de la Actividad y se le asigna un OnTouchListener para manejar los eventos de toque y se establece como vista de la Actividad. Retomando el tema del MediaPlayer, cargamos los archivos de audio a través del método setdatasource() al cual le enviamos tres valores como parámetros; el primero de ellos es el descriptor del archivo el cual obtenemos de la misma manera que obtenemos el descriptor para los sonidos, el segundo valor indica el punto donde inicia la pista y este lo podemos obtener con el método getstartoffset() de la clase AssetFileDescriptor, el tercero y último valor indica la longitud de la pista la cual podemos obtener con la ayuda del método getlength() de la misma clase. Ahora bien, una vez que hemos cargado el archivo de audio es necesario llamar al método prepare() de la clase MediaPlayer el cual se encarga de verificar si la el archivo esta listo para ser reproducido. Ya que hemos llamado al método prepare() entonces el archivo puede ser reproducido, esto lo logramos con el método play(). Para controlar la reproducción del archivo se cuenta también con los métodos pause() y stop() los cuales, como su nombre lo indica, ayudan respectivamente a pausar y detener el audio. Si se desea reproducir de nuevo el audio tras haber llamado al método pause() se puede tranquilamente llamar de nueva cuenta al método play() para continuar con la reproducción, sin embargo si se desea hacer esto mismo tras haber llamado al método stop() es necesario llamar en primera instancia al método prepare() para posteriormente poder llamar al método play() y reproducir el audio sin problema alguno. Otros dos métodos que nos serán de utilidad de esta misma clase son los métodos release() y setlooping(). El método release() se encarga de liberar de memoria todos los recursos que eran ocupados por el audio mientras que con el método setlooping() podemos ciclar la reproducción del archivo de tal manera que se reproduzca continuamente sin parar hasta que se lo indiquemos. Como podemos observar, la colección de objetos Raton, ratones, que creamos esta definida como una lista encadenada. Para crear una nueva lista encadenada utilizamos la siguiente instrucción: lista = new LinkedList<Objeto>();, donde Objeto es la clase de los objetos que contendrá la lista. Para añadir elementos a una lista encadenada tenemos el método add() al cual le enviamos como parámetro el elemento que se desea agregar. Por otro lado, para accesar a algún elemento de la lista contamos con el método get() al cual le enviamos como parámetro el índice de la posición del elemento que deseamos accesar, de manera similar a como lo haríamos con un arreglo. Continuando con nuestra Actividad, ahora definimos los métodos onpause() y onresume() los cuales nos ayudarán a sincronizar el thread de la Actividad con

11 el thread de la vista que estamos manejando de tal manera que ambos trabajen a la par para evitar algún problema. / Método onpause sobrescrito de la clase Activity Llamado cuando la Actividad pasa a segundo plano pero aun no es visible, libera recursos usados por la Actividad protected void onpause() { super.onpause(); //Pausa la vista de la Actividad renderview.pause(); //Libera el candado que protege la pantalla wakelock.release(); //Se liberan los efectos de sonido que actualmente se encuentran //en la colección pool.release(); //Pausa el reproductor de multimedia if (mediaplayer!= null) { mediaplayer.pause(); //Si la aplicación será destruida detiene el reproductor y //libera la memoria if (isfinishing()) { mediaplayer.stop(); mediaplayer.release(); / Método onresume sobrescrito de la clase Activity Llamado cuando la Actividad vuelve a primer plano protected void onresume() { super.onresume(); //Reanuda la vista de la Actividad renderview.resume(); //Retoma el candado que protege a la pantalla wakelock.acquire(); //Inicia la reproducción del reproductor multimedia if (mediaplayer!= null) { mediaplayer.start();

12 En el método onpause() pausamos el thread de la vista llamando a su método pause(). Liberamos el wake lock para que el sistema o la actividad que se encuentre actualmente en primer plano pueda encargarse de manejarlo. También liberamos los recursos de la colección de sonidos para liberar memoria a través del método release() de la clase SoundPool. Verificamos si el reproductor de multimedia contiene algo para pausarlo y si es necesario detener la reproducción. En el método onresume() simplemente reanudamos el thread de la vista llamando a su método resume() y retomamos el wake lock para evitar que el dispositivo entre en estado de reposo. Reiniciamos también la reproducción del reproductor de multimedia. En seguida sobrescribimos el método ontouch() de la interfase OnTouchListener. Este método nos ayudará en el manejo de los eventos de toque de tal manera que podamos actualizar el la aplicación en base a las acciones del usuario. El método ontouch() recibe como parámetros la vista a la cual esta asignado el OnTouchListener y un evento de la clase MotionEvent el cual contiene la información del toque. Para un evento de este tipo existen cuatro diferentes tipos básicos de acciones a las cuales puede corresponder: ACTION_DOWN, ACTION_MOVE, ACTION_CANCEL y ACTION_UP. Un evento del tipo ACTION_DOWN corresponde a la acción del usuario de presionar un punto en la pantalla con el dedo. Un evento del tipo ACTION_MOVE corresponde a la acción del usuario de arrastrar el dedo sobre la pantalla. Un evento del tipo ACTION_CANCEL corresponde a la acción del usuario de interrumpir un gesto que este realizando sobre la pantalla del dispositivo. Finalmente, un evento del tipo ACTION_UP corresponde a la acción del usuario de despegar el dedo de la pantalla del dispositivo. / Método ontouch sobrescrito de la interfase OnTouchListener Maneja los eventos de contacto en la v es la vista que contiene el event son los eventos de contacto atrapados por el regresa verdadero cuando es llamado public boolean ontouch(view v, MotionEvent event) { //Maneja los eventos de contacto switch (event.getaction()) { //Cuando se hace contacto con el dedo case MotionEvent.ACTION_DOWN: // break;

13 //Cuando se mueble dedo haciendo contacto case MotionEvent.ACTION_MOVE: // break; case MotionEvent.ACTION_CANCEL: // break; //Cuando se deja de hacer contacto case MotionEvent.ACTION_UP: //Cambia la dirección de movimiento del objeto //Elefante dependiendo del punto de contacto if ((event.getx() scalex) < elefante.x) elefante.dir = Elefante.LEFT; else if ((event.getx() scalex) > elefante..x + elefante.animacion.getcuadro().getwidth()) elefante.dir = Elefante.RIGHT; else if ((event.gety() scaley) < elefante.y) elefante.dir = Elefante.UP; else if ((event.gety() scaley) > elefante.y + elefante.animacion.getcuadro().getheight()) elefante.dir = Elefante.DOWN; break; return true; Cuando el usuario hace un toque sobre la pantalla cambia la dirección de movimiento del elefante dependiendo de la región donde el usuario hizo el toque con respecto a la posición del elefante. Ahora definimos la clase interna RenderView en la Actividad. La clase RenderView extiende a la clase SurfaceView e implementa a la interfase Runnable lo cual permite que esta clase corra en su propio thread. Empezamos esta clase por definir sus miembros. / Clase RenderView Clase interna de la clase TutorialElefante Maneja una vista y su ciclo de vida en un thread independiente / public class RenderView extends SurfaceView implements Runnable { //Thread de la vista Thread renderthread = null; //Contenedor de la vista SurfaceHolder holder; //Canvas para dibujar Canvas canvas; //Bandera para conocer el estado de la Actividad

14 volatile boolean running = false; //Controladores de tiempo float tiempotick = 0, tick = 0.1f; El renderthread es el thread mismo de la vista el cual tendremos que sincronizar con el thread de la Actividad. El miembro holder de la clase SurfaceHolder es una superficie que contiene a la vista con la cual estamos trabjando. Con la ayuda del miembro canvas podremos dibujar sobre nuestro buffer virtual para posteriormente proyectarlo en la pantalla. El miembro running nos indicará si el thread esta actualmente activo lo cual nos ayuda para la sincronización entre el thread de la vista y el thread de la Actividad. Los miembros tiempotick y tick nos indican el tiempo transcurrido y el tiempo que debe durar cada ciclo de actualización respectivamente. / Método constructor de la clase RenderView Llama al método constructor de la clase base al cual le pasa el contexto como parámetro y crea los objetos requeridos por la context es el contexto desde el cual fue llamado el método / public RenderView(Context context) { super(context); //Obtiene el contenedor holder = getholder(); //Crea un nuevo objeto canvas con el buffer creado en la //Actividad canvas = new Canvas(frameBuffer); Los métodos resume() y pause() de esta clase se encargan respectivamente de reanudar y pausar el thread de la vista así como también de informar a esta del estado del thread. / Método resume Llamado cuando la Actividad vuelve a primer plano, inicia el thread de la vista / public void resume() { //La bandera indica que la Actividad esta en ejecución running = true; //Crea un nuevo thread para la vista renderthread = new Thread(this);

15 //Inicializa el thread de la vista renderthread.start(); / Método pause Llamado cuando la Actividad pasa a segundo plano, detiene el thread de la vista / public void pause() { //La bandera indica que la Actividad no esta en ejecución running = false; //Espera a que el thread de la vista se detenga while(true) { try { renderthread.join(); break; catch (InterruptedException e) { // En el método run() actualizamos los objetos Elefante y Raton en base al tiempo transcurrido desde la última actualización. Para esto llamamos al método actualiza() el cual recibe como parámetro el tiempo. También dibujamos al elefante y los ratones en el buffer virtual para posteriormente proyectar al mismo en la pantalla del dispositivo. / Método run sobrescrito de la clase Thread Llamado cuando el thread de la vista esta en ejecución, se encarga de actualizar la vista de la Actividad / public void run() { //Objeto Rect crea un rectángulo Rect dstrect = new Rect(); //Obtiene el tiempo actual long tiempoi = System.nanoTime(); //El ciclo se ejecuta cuando la Actividad esta en ejecución while (running) { //Verifica que exista una vista válida if(!holder.getsurface().isvalid()) continue; //Calcula el tiempo transcurrido float tiempo = (System.nanoTime() tiempoi) /

16 f; //Obtiene el tiempo actual tiempoi = System.nanoTime(); //Pinta un fondo amarillo canvas.drawrgb(255, 255, 0); //Actualiza los objetos en base al tiempo //transcurrido actualiza(tiempo); //Dibuja el objeto Elefante en el buffer canvas.drawbitmap(elefante.animacion.getcuadro(), elefante.x, elefante.y, null); //Dibuja los ratones en el buffer for (int i = 0; i < ratones.size(); i++) canvas.drawbitmap( ratones.get(i).animacion.getcuadro(), ratones.get(i).x, ratones.get(i).y, null); //Crea un nuevo canvas con la vista actual Canvas pantalla = holder.lockcanvas(); //Determina la resolución de la pantalla pantalla.getclipbounds(dstrect); //Dibuja el buffer en la pantalla con el tamaño de la //pantalla pantalla.drawbitmap(framebuffer, null, dstrect, null); holder.unlockcanvasandpost(pantalla); Ahora definimos el método actualiza() el cual se encarga de actualizar la posición y la animación tanto del objeto Elefante como de los objetos Raton en base al tiempo transcurrido. En este mismo método mandamos a checar las colisiones entre objetos y las colisiones con las orillas del frame. Para actualizar los objetos llamamos a los métodos elefanteavanza() y ratonavanza() que mas adelante definiremos. Por otro lado, llamamos a los métodos colisionframe() y colisionanimales() para checar las colisiones de los objetos. / Método actualiza Llamado para actualizar el estado de los objetos Elefante y Raton en base al tiempo que ha tiempo es el tiempo transcurrido desde la última actualización / private void actualiza(float tiempo) { //Guarda el tiempo transcurrido tiempotick += tiempo;

17 //Actualiza mientras el tiempo transcurrido sea mayor al //tiempo de actualización while(tiempotick > tick) { tiempotick - = tick; //Actualiza la posición del objeto Elefante elefanteavanza(); //Actualiza la posición de los objetos Raton ratonavanza(); //Checa la colisión de los objetos con las orillas del //frame colisionframe(); //Checa la colisión entre objetos colisionanimales(); //Actualiza la animación del elefante en base al tiempo //transcurrido elefante.animacion.anima(tiempo); //Actualiza la animación de los ratones en base al tiempo //transcurrido for (int i = 0; i < ratones.size(); i++) { ratones.get(i).animacion.anima(tiempo); Los métodos elefanteavanza() y ratonavanza() se encargan de actualizar la posición del elefante y los ratones respectivamente. El método elefanteavanza() actualiza la posición del objeto Elefante en base a la dirección del movimiento del mismo. El método ratonavanza(), por su parte, actualiza la posición de los objetos Raton en base a la posición del elefante de tal manera que estos persigan al mismo. / Método elefanteavanza Actualiza la posición del objeto Elefante dependiendo de su dirección actual / private void elefanteavanza() { //Avanza a la derecha if (elefante.dir == Elefante.RIGHT) elefante.x += 5; //Avanza a la izquierda if (elefante.dir == Elefante.LEFT) elefante.x - = 5; //Avanza arriba if (elefante.dir == Elefante.UP) elefante.y - = 5; //Avanza abajo

18 if (elefante.dir == Elefante.DOWN) elefante.y += 5; / Método ratonavanza Actualiza la posición de los objetos Raton dependiendo de la posición actual del objeto Elefante / private void ratonavanza() { for (int i = 0; i < ratones.size(); i++) { //Avanza a la derecha if (elefante.x > ratones.get(i).x) ratones.get(i).x += 3; //Avanza a la izquierda else ratones.get(i).x - = 3; //Avanza abajo if (elefante.y > ratones.get(i).y) ratones.get(i).y += 3; //Avanza arriba else ratones.get(i).y - = 3; Ahora, como lo mencionamos anteriormente, los métodos colisionframe() y colisionanimales() se encargan de manejar las colisiones de los objetos de la Activdad. El método colisionframe() se asegura que todos los objetos se mantengan dentro del marco del frame de la Actividad de tal manera que siempre estén a la vista del usuario. Para esto, después de actualizar la posición de los objetos, se toma como referencia la misma para verificar que los objetos no hayan rebasado bordes de la pantalla, de ser así el método cambia la posición de los objetos y reproduce un sonido para indicar que hubo una colisión. Para reproducir este sonido implementamos el método playsound() que definiremos más adelante. El método colisionanimales() saca ventaja del método intersect() de la clase Rect para detectar la colisión entre dos objetos. El método intersect() nos permite saber cuando dos objetos de esta clase se intersectan, es decir, se encuentran colisionando de tal manera que para detectar la colisión entre el elefante y los ratones llamamos al rectángulo de ambos para checar la colisión de estos con el método intersect(). En caso de que los objetos colisionen son movidos a una nueva posición y se reproduce un sonido en señal de que hubo una colisión / Método colisionframe Checa la colisión de los objetos Elefante y Raton con las orillas

19 de la pantalla / private void colisionframe() { //Checa colisión del objeto Elefante con las orillas de la //pantalla if(elefante.x + elefante.animacion.getcuadro().getwidth() > framebuffer.getwidth()) { //Cambia la dirección del movimiento elefante.dir = Elefante.LEFT; //Reproduce el sonido del elefante playsound(elefanteid); else if(elefante.x < 0) { //Cambia la dirección del movimiento elefante.dir = Elefante.RIGHT; //Reproduce el sonido del elefante playsound(elefanteid); if(elefante.y + elefante.animacion.getcuadro().getheight() > framebuffer.getheight()) { //Cambia la dirección del movimiento elefante.dir = Elefante.UP; //Reproduce el sonido del elefante playsound(elefanteid); else if(elefante.y < 0) { //Cambia la dirección del movimiento elefante.dir = Elefante.DOWN; //Reproduce el sonido del elefante playsound(elefanteid); //Checa colisión de los objetos Raton con las orillas de la //pantalla for (int i = 0; i < ratones.size(); i++) { if(ratones.get(i).x + ratones.get(i).animacion.getcuadro().getwidth() > framebuffer.getwidth()) { //Aleja al objeto Raton de la orilla ratones.get(i).x - = 3; //Reproduce el sonido del ratón playsound(ratonid); else if(ratones.get(i).x < 0) { //Aleja al objeto Raton de la orilla ratones.get(i).x += 3; //Reproduce el sonido del ratón playsound(ratonid);

20 if(ratones.get(i).y + ratones.get(i).animacion.getcuadro().getheight > framebuffer.getheight()){ //Aleja al objeto Raton de la orilla ratones.get(i).y - = 3; //Reproduce el sonido del ratón playsound(ratonid); else if (ratones.get(i).y < 0) { //Aleja al objeto Raton de la orilla ratones.get(i).y += 3; //Reproduce el sonido del ratón playsound(ratonid); / Método colisionanimales Checa la colisión entre objetos Ratón y Elefante / private void colisionanimales() { //Para cada Raton checa si hubo colisión con el objeto //Elefante for (int i = 0; i < ratones.size(); i++) { //Si el rectángulo del elefante intersecta con el del //ratón hubo colisión if (elefante.getrectangulo().intersect(ratones.get(i). getrectangulo())) { //Se reposiciona el elefante en el centro de la //pantalla elefante.x = framebuffer.getwidth() / 2 elefanteanim.getcuadro().getwidth() / 2; elefante.y = framebuffer.getheight() / 2 elefanteanim.getcuadro().getheight() / 2; //Se reposiciona el ratón que colisionó en //una nueva posición al azar ratones.get(i).x = (int) (Math.random() framebuffer.getwidth()) ratonanim.getcuadro().getwidth(); ratones.get(i).y = (int) (Math.random() framebuffer.getheight()) ratonanim.getcuadro().getheight(); //Reproduce el sonido de explosión playsound(explosionid);

21 Finalmente definimos el método playsound() el cual sencillamente se ocupa de reproducir el sonido indicado. Para esto primero se asegura de que el mismo no este ya en reproducción y lo detiene para posteriormente reproducirlo de nueva cuenta. El método playsound() recibe como parámetro el id del sonido que se desea reproducir. / Método playsound Reproduce efectos de sonido en la colección de id es el identificador del efecto de sonido a reproducir / private void playsound(int id) { //Si el sonido ya estaba en reproducción lo detiene pool.stop(id); //Reproduce el efecto de sonido pool.play(id, 1, 1, 0, 0, 1);

Android Touch. En esta misma clase modificamos también el método avanza() de tal manera que ahora el elefante pueda desplazarse también en el eje y.

Android Touch. En esta misma clase modificamos también el método avanza() de tal manera que ahora el elefante pueda desplazarse también en el eje y. Android Touch En este tutorial aprenderemos a utilizar la pantalla táctil de los dispositivos para sacar ventaja de ello en nuestras aplicaciones. Para este tutorial tomaremos como base el tutorial anterior,

Más detalles

Animación en Android. Clase Elefante

Animación en Android. Clase Elefante Animación en Android En este tutorial cubriremos algunos aspectos básicos sobre el manejo de la pantalla, gráficos y animación en Android, para esto construiremos una Actividad que muestre en pantalla

Más detalles

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android. Sesión 1: introducción a Android

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android. Sesión 1: introducción a Android Plataforma Android Sesión 1: introducción a Android 2011 2012 Depto. Ciencia de la Computación e IA Puntos a tratar Aplicaciones Android El archivo Manifest Ciclo de ejecución de aplicaciones Recursos

Más detalles

Crear un Splash-Screen

Crear un Splash-Screen Crear un Splash-Screen El splashscreen es una pantalla que carga justo cuando se abre la aplicación y que generalmente tiene algún aviso que indica al usuario que algo está sucediendo mientras se carga

Más detalles

Android y Java para Dispositivos Móviles

Android y Java para Dispositivos Móviles Android y Java para Dispositivos Móviles Sesión 11: Gráficos avanzados Android y Java para Dispositivos Móviles 2010 Depto. Ciencia de la Computación e IA Gráficos avanzados 1 Puntos a tratar Gráficos

Más detalles

Gráficos y multimedia

Gráficos y multimedia Gráficos y multimedia Sesión 4: grabación de vídeo/audio y gráficos avanzados en Android 2011 2012 Depto. Ciencia de la Computación e IA Puntos a tratar Grabación de medios Intents MediaRecorder Síntesis

Más detalles

Grabación de audio/vídeo y gráficos avanzados en Android - Ejercicios

Grabación de audio/vídeo y gráficos avanzados en Android - Ejercicios Grabación de audio/vídeo y gráficos avanzados en Android - Ejercicios Índice 1 Síntesis de voz con Text to Speech... 2 2 Gráficos 3D... 3 3 Grabación de vídeo con MediaRecorder (*)... 3 1. Síntesis de

Más detalles

En nuestra actividad principal, creamos el objeto vista previa. Este objeto se creará el objeto cámara y volver a la actividad CameraDemo.

En nuestra actividad principal, creamos el objeto vista previa. Este objeto se creará el objeto cámara y volver a la actividad CameraDemo. Uso de la Cámara API Android SDK es compatible con la conectividad a la cámara integrada. Usar la cámara para tomar fotos es relativamente fácil. Es algo más difícil de configurar la previa de la cámara

Más detalles

Gráficos y multimedia

Gráficos y multimedia Gráficos y multimedia Sesión 1: reproducción de medios en Android 2011 2012 Depto. Ciencia de la Computación e IA Puntos a tratar La clase MediaPlayer Reproducción de Audio Reproducción de Vídeo VideoView

Más detalles

Sensores de los dispositivos

Sensores de los dispositivos Sensores de los dispositivos Sesión 1: Pantalla táctil y acelerómetro 2012-2013 Depto. Ciencia de la Computación e IA Puntos a tratar Entrada en dispositivos móviles Pantalla táctil Eventos multitouch

Más detalles

Sebastián García Galán

Sebastián García Galán Universidad de Jaén E.U.P. Linares Dpto. Telecomunicaciones Área de Ingeniería Telemática Sebastián García Galán sgalan@ujaen.es Variables y tipos de datos Operaciones y operadores Clases y objetos Tipos

Más detalles

ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE

ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE SQLite M.Sc. Reynaldo Zeballos ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE En este ejercicio vamos a crear una tabla TELEFONOS para la base de datos GUIATEL. Para lo cual utilizaremos SQLite que viene

Más detalles

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; } PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)

Más detalles

Android TAG y el principio DRY

Android TAG y el principio DRY Android es una plataforma de desarrollo que empieza a tener el sobrenombre de INFINITA en cuanto a las cosas que se pueden hacer, conjunto de APIs soportadas etc. Sin embargo al ser tan grande muchas veces

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

PROGRAMACION I Archivos directos

PROGRAMACION I Archivos directos PROGRAMACION I Archivos directos Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo.

Más detalles

Desarrollo de Aplicaciones para Android

Desarrollo de Aplicaciones para Android Desarrollo de Aplicaciones para Android Sesión 5: Multimedia Desarrollo de Aplicaciones para Android 2011 Depto. Ciencia de la Computación e IA Multimedia 1 Puntos a tratar Multimedia en Android Reproducción

Más detalles

Grabación de audio/vídeo y gráficos avanzados en Android

Grabación de audio/vídeo y gráficos avanzados en Android Grabación de audio/vídeo y gráficos avanzados en Android Índice 1 Grabando vídeo y audio... 2 1.1 Usando Intents para capturar vídeo...2 1.2 Usando la clase MediaRecorder...3 1.3 Configurando y controlando

Más detalles

Tecnología de Programación

Tecnología de Programación Tecnología de Programación Diego C. Martínez Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Dispositivos móviles Dispositivos móviles 2005 2002 Dispositivos móviles

Más detalles

Android y Java para Dispositivos Móviles

Android y Java para Dispositivos Móviles Android y Java para Dispositivos Móviles Sesión 13: Multimedia Android y Java para Dispositivos Móviles 2010 Depto. Ciencia de la Computación e IA Multimedia 1 Puntos a tratar Multimedia en Android Reproducción

Más detalles

Tema 6. Threads: programas multitarea

Tema 6. Threads: programas multitarea Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos

Más detalles

POO: Clases y objetos

POO: Clases y objetos POO: Clases y objetos Programación de aplicaciones 1 Introducción En los lenguajes de programación orientados a objetos, tenemos la posibilidad de extender el lenguaje mediante la creación de nuevo tipos,

Más detalles

Servicios de la plataforma Android

Servicios de la plataforma Android Servicios de la plataforma Android Sesión 1: Librerías de compatibilidad y servicios 2012-2013 Depto. Ciencia de la Computación e IA Puntos a tratar Compatibilidad de versiones Fragmentos Loaders Librería

Más detalles

Hola Android. Introducción al desarrollo de aplicaciones para Android

Hola Android. Introducción al desarrollo de aplicaciones para Android Hola Android. Introducción al desarrollo de aplicaciones para Android Las aplicaciones para el sistema operativo móvil Android son desarrolladas en el lenguaje de programación Java en conjunto con el SDK

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

import java.applet.*; import java.awt.*; import java.awt.event.*;

import java.applet.*; import java.awt.*; import java.awt.event.*; /* Conway s Game Of Life (in Spanish) Juego de la Vida v. 0.1 implementacion de Henrik Mitsch (henx@bigfoot.com) probablemente online en http://henx.home.dhs. org/juegodelavida.html */ import java.applet.*;

Más detalles

Introducción a los Threads Java

Introducción a los Threads Java 75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2014 Facultad de Ingeniería Universidad de Buenos Aires Introducción a los Threads Java Para crear un nuevo Thread Se extiende la clase

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

Ejercicio 18. Configuración de Widgets en Android. Android Con Java. Ejercicio 18. Configuración de Widgets en Android. Curso de Android con Java

Ejercicio 18. Configuración de Widgets en Android. Android Con Java. Ejercicio 18. Configuración de Widgets en Android. Curso de Android con Java Android Con Java Ejercicio 18 Configuración de Widgets en Android Objetivo del Ejercicio El objetivo del ejercicio crear un Widget que antes de utilizarlo nos permita configurarlo. En este caso, solicitar

Más detalles

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Ingeniería del Software Separación entre Presentación y Lógica del Negocio Introducción En este laboratorio desarrollaremos una aplicación que verifica si una cuenta y un password son correctos. En dicha aplicación la presentación y la lógica del negocio se definirán en dos capas

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

Desarrollo de Aplicaciones Criptográficas en Android

Desarrollo de Aplicaciones Criptográficas en Android Desarrollo de Aplicaciones Criptográficas en Android José A. Montenegro Dpto. Lenguajes y Ciencias de la Computación ETSI Informática. Universidad de Málaga monte@lcc.uma.es 24 de octubre de 2011 José

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

Guillermo Román Díez

Guillermo Román Díez Concurrencia Creación de Procesos en Java Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia

Más detalles

100x70 - PNG 24x24 - PNG

100x70 - PNG 24x24 - PNG 1 Menú lateral Antes que nada se debe crear un proyecto, en este ejemplo se llama Tsikbal. 1.- Comencemos por el build.gradle(module:app) y agregamos las dependencias, las versiones dependerá de las que

Más detalles

Programación Android. Rafael Morón Abad rafaelmoron@gmail.com

Programación Android. Rafael Morón Abad rafaelmoron@gmail.com Programación Android Rafael Morón Abad rafaelmoron@gmail.com Otras APIs avanzadas Otras APIs de Interés en Android son: Audio y Video Localización y Mapas Audio y Vídeo Android soporta una gran variedad

Más detalles

Antes que nada se debe crear un proyecto, en este ejemplo se llama KaaxTik.

Antes que nada se debe crear un proyecto, en este ejemplo se llama KaaxTik. 1 Menú lateral Antes que nada se debe crear un proyecto, en este ejemplo se llama KaaxTik. 1.- Comencemos por el build.gradle(module:app) y agregamos las dependencias, las versiones dependerá de las que

Más detalles

Ejercicio 21. Manejo de Sonido en Android. Android Con Java. Ejercicio 21. Manejo de Sonido en Android. Curso de Android con Java

Ejercicio 21. Manejo de Sonido en Android. Android Con Java. Ejercicio 21. Manejo de Sonido en Android. Curso de Android con Java Android Con Java Ejercicio 21 Manejo de Sonido en Android Objetivo del Ejercicio El objetivo del ejercicio poner en práctica el Manejo de Sonido en Android. Al finalizar el ejercicio deberemos escuchar

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Primera parte (50% nota del examen) Septiembre 2009 1) Se desea hacer un método con la cabecera que se muestra abajo que cree y retorne

Más detalles

Unidad 3. PrimerProyecto. Nuestra primera aplicacio n Android

Unidad 3. PrimerProyecto. Nuestra primera aplicacio n Android Unidad 3. PrimerProyecto. Nuestra primera aplicacio n Android Jose A. Montenegro Dpto. Lenguajes y Ciencias de la Computacio n ETSI Informa tica. Universidad de Ma laga monte@lcc.uma.es 14 de abril de

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?

Más detalles

CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web

CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web I. Alcances del Proyecto a. Ide Eclipse Indigo 3.7 b. Api 10-17, Versión Android 2.3.3 A 4.2.2 c. Jdk 1.6 II. Conceptos Relacionados

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Estructuras de decisión PRÁCTICA NÚM. [ 5 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

NOMBRE DEL TALLER: Desarrollo de Aplicaciones Móviles con App Inventor

NOMBRE DEL TALLER: Desarrollo de Aplicaciones Móviles con App Inventor NOMBRE DEL PONENTE: Ernesto Arce Pizarro INSTITUCIÓN: Universidad de La Serena NOMBRE DEL TALLER: Desarrollo de Aplicaciones Móviles con App Inventor Más allá del domo (Logan s Run 1976) La Importancia

Más detalles

Concurrencia en Android LSUB, GYSC, URJC

Concurrencia en Android LSUB, GYSC, URJC Concurrencia en Android LSUB, GYSC, URJC Repaso de concurrencia en Java Crear un thread Instanciar un Thread, con el método run sobreescrito Intanciar un objeto que cumpla el interfaz Runnable y pasárselo

Más detalles

Tareas en segundo plano AsyncTask Thread

Tareas en segundo plano AsyncTask Thread Tareas en segundo plano AsyncTask Thread Programació De Dispositius Mòbils PRDM Cristobal Raya Giner 2015 Hilos de ejecución En una aplicación Android, todas las actividades, los servicios y los broadcast

Más detalles

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente. HERENCIA (2ª parte) Lenguajes de Programación - Orientación a Objetos: Herencia 2ª parte 1 Object En Java todas las clases derivan de otra, aunque no se diga explícitamente. Object: Es el nombre de la

Más detalles

Programación Android. Alejandro Alcalde. elbauldelprogramador.com

Programación Android. Alejandro Alcalde. elbauldelprogramador.com Programación Android Alejandro Alcalde elbauldelprogramador.com Copyright c 2013 Alejandro Alcalde P L A TEX. Programación Android por Alejandro Alcalde se encuentra bajo una Licencia Creative Commons

Más detalles

Colas. 5.1 Implementación

Colas. 5.1 Implementación Capítulo 5 Colas Las colas al igual que las pilas son un tipo especial de listas en las cuales los elementos se insertan por un lado y se eliminan por el otro. Es decir se sacan en el mismo orden en que

Más detalles

Cursos on line FADU UBA Cómo utilizar el panel de Acciones?

Cursos on line FADU UBA Cómo utilizar el panel de Acciones? Módulo clase 1 6 2 3 4 5 Cómo utilizar el panel de Acciones? ficha 20 página 1 Cuál es el procedimiento para asignar acciones a los objetos? ficha 21 página 3 Cómo se realiza la configuración de las opciones

Más detalles

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C) APRENDERAPROGRAMAR.COM INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C) Sección: Cursos Categoría: Lenguaje de programación Java

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2005 1) Escribir una clase con un atributo privado que sea un array de

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución. Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta

Más detalles

Programación concurrente

Programación concurrente Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Programación concurrente

Más detalles

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Tema 7.- Fundamentos de la Programación Orientada a Objetos Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).

Más detalles

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de

Más detalles

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN EJERCICIO 1 (1.5 puntos) Diseñe un conjunto de casos de prueba adecuado para comprobar el funcionamiento de un método encargado de calcular la duración de una llamada telefónica. Entradas Hora de inicio

Más detalles

Crear listas personalizadas en Android

Crear listas personalizadas en Android Crear listas personalizadas en Android Introducción Bienvenidos a la sección de programación Android, hoy voy a explicar cómo crear listas personalizadas en Android. Las listas en Android son elementos

Más detalles

Clases y Objetos en C++

Clases y Objetos en C++ Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar

Más detalles

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACION CONCURRENTE PARALELA Y PRACTICA 3 (PARTE 1 Y 2) HILOS POSIX NOMBRE:

Más detalles

Android y Recursos. Android R.java (fichero)

Android y Recursos. Android R.java (fichero) Cuando uno empieza a desarrollar en Android una de las mayores dudas con las que se encuentra es como funciona el fichero R.java que es generado automaticamente por el compilador. Android y Recursos Para

Más detalles

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS

Más detalles

Solución al Examen de Fundamentos de Computadores y Lenguajes

Solución al Examen de Fundamentos de Computadores y Lenguajes Solución al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2006 1) Se dispone de la siguiente clase enumerada. Escribir un método,

Más detalles

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA Implementación de conceptos P.O.O. en Java Temario 2. Conceptos de Programación Orientada a Objetos 1. Conceptos de P.O.O. 2. Implementación de conceptos P.O.O

Más detalles

Desarrollo de Aplicaciones para Android

Desarrollo de Aplicaciones para Android Desarrollo de Aplicaciones para Android Sesión 4: Eventos y sensores Desarrollo de Aplicaciones para Android Depto. Ciencia de la Computación e IA Eventos y sensores 1 Puntos a tratar Entrada en dispositivos

Más detalles

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++; Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software UPM ETSIINF. Exámen de Programación II. Convocatoria extraordinaria.08-07-2016. Realización: El test se realizará en la hoja

Más detalles

Tema 2: Programación basada en Objetos

Tema 2: Programación basada en Objetos Tema 2: Programación basada en Objetos Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Índice Objetivos Introducción Vista Pública Clases Objetos

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS

NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS 1 NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS JTree 2 Agenda Qué es? Conceptos Creación de un JTree Personalización de un JTree Selección de nodos Actualización dinámica del árbol Visualización de un archivo

Más detalles

Clase 35. Aprendizaje activo: Uso de hilos para crear una animación. Hilos y Swing

Clase 35. Aprendizaje activo: Uso de hilos para crear una animación. Hilos y Swing Clase 35 Aprendizaje activo: Uso de hilos para crear una animación Hilos y Swing Todos los programas de Java ejecutan, al menos, tres hilos: 1. el hilo main(); es decir, el hilo que comienza con el método

Más detalles

2. Indica cuál de las siguientes afirmaciones es cierta:

2. Indica cuál de las siguientes afirmaciones es cierta: Nombre:. Indica cuál de las siguientes afirmaciones es cierta: El diseño de un programa procedural está guiado por la división en tareas a realizar, mientras que el diseño orientado a objetos está dirigido

Más detalles

Capitulo V. Sistema Robot dirigido por voz.

Capitulo V. Sistema Robot dirigido por voz. Capitulo V. Sistema Robot dirigido por voz. El propósito principal de este sistema es que el robot ejecute ciertas instrucciones en tiempo real, lo interesante es que las instrucciones se las da el usuario

Más detalles

Universidad Autónoma de Baja California Facultad de Ingeniería Apuntes de Programación Orientada a Objetos I

Universidad Autónoma de Baja California Facultad de Ingeniería Apuntes de Programación Orientada a Objetos I Hilos Universidad Autónoma de Baja California Hasta el momento los programas que se han estado manejando en el curso han sido secuenciales. Esto es, inician en un punto y continuan su ejecución de manera

Más detalles

Anexo D. Documentación técnica de VELOAT

Anexo D. Documentación técnica de VELOAT Anexo D. Documentación técnica de VELOAT En este anexo se encuentran los principales diagramas UML del sistema VELOAT, o la referencia al lugar donde se pueden consultar. No se incluyen todos los diagramas

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Sea una aplicación Java donde todas las clases están compiladas y empaquetas en un solo fichero JAR (programa.jar). Qué sería necesario para conseguir ejecutar

Más detalles

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Examen de Ejemplo Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Parte Teórica (2,5 puntos). La respuesta correcta se indica

Más detalles

Estructura de datos y Programación

Estructura de datos y Programación Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de

Más detalles

Práctica 3. Android. Tutorial appfotovoz

Práctica 3. Android. Tutorial appfotovoz Práctica 3. Android. Tutorial appfotovoz José Antonio Larrubia García José Miguel Navarro Moreno Índice: 1.- Introducción. 2.- Descripción de la solución y problemas encontrados. 3.- Manual de uso. 4.-

Más detalles

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Empresa Videojuegos (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Rectangulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

Sensores. JOSE LUIS BERENGUEL GÓMEZ jlberenguel@gmail.com Marzo 2012

Sensores. JOSE LUIS BERENGUEL GÓMEZ jlberenguel@gmail.com Marzo 2012 Sensores JOSE LUIS BERENGUEL GÓMEZ jlberenguel@gmail.com Marzo 2012 Contenidos Tipos de sensores. Sensores de movimiento Sensores de posición. Sensores ambientales. Framework para manejar los sensores.

Más detalles

Programación concurrente en Java

Programación concurrente en Java Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Threads en

Más detalles

2ª Parte: Problemas (5 puntos sobre 10)

2ª Parte: Problemas (5 puntos sobre 10) NOMBRE: APELLIDOS: NIA: GRUPO: 2ª Parte: Problemas (5 puntos sobre 10) Duración: 1 hora 45 minutos Puntuación máxima: 5 puntos Fecha: 17 de Junio de 2013 PROBLEMA 1 (3 puntos) El sistema de gestión de

Más detalles

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en

Más detalles

Tutorial de Python orientado a objetos

Tutorial de Python orientado a objetos Tutorial de Python orientado a objetos En la primera llave creamos una clase llamada Gelantia. En la primera parte def init (self, tam, color, sabor): definimos las características del objeto. En la segunda

Más detalles

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos

Más detalles

1 Menú lateral. 3.- Estas imágenes deber ser copiadas y pegadas en la carpeta drawable del proyecto

1 Menú lateral. 3.- Estas imágenes deber ser copiadas y pegadas en la carpeta drawable del proyecto 1 Menú lateral Antes que nada se debe crear un proyecto, en este ejemplo se llama KaaxTik. 1.- Comencemos por el build.gradle(module:app) y agregamos las dependencias, las versiones dependerá de las que

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2003 1) Se dispone del siguiente array de números reales ya creado.

Más detalles

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011 Tema 6 Patrones de Diseño Programación Orientada a Objetos Curso 2010/2011 Contenido Introducción a los patrones de diseño. Patrón del Método plantilla. Patrón Composición. Patrón Estrategia. Clases anónimas

Más detalles

APÉNDICES. CÓDIGO EN lejos DE LAS PRINCIPALES CLASES IMPLEMENTADAS

APÉNDICES. CÓDIGO EN lejos DE LAS PRINCIPALES CLASES IMPLEMENTADAS APÉNDICES APÉNDICE 1 CÓDIGO EN lejos DE LAS PRINCIPALES CLASES IMPLEMENTADAS 1.1 Clase: robotprueba1 import josx.robotics.*; import josx.platform.rcx.*; * Clase principal del proyecto. Aquí se inicializan

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

Más detalles