Creando nuestra primera app de Android

¡Hola! Bueno, hoy nos metemos en materia a la hora de crear una aplicación para dispositivos móviles, en mi caso, para mi teléfono con una versión android 2.3.3 (antigua ya… :P, pero el hardware no da más de sí jeje).

Bueno la app es muy simple, demasiado diría yo :P, pero bueno, por ser la primera se perdona :D. Bien, lo que hace esta aplicación es obtener un parámetro (tiempo de exposición) a partir de otros, vereis…

Hace unos dias me encontraba intentando fotografiar las estrellas en la noche, ¿problema? la luz.

La cámara en modo manual te permite configurar una serie de parámetros, nivel iso, apertura de diafragma (número f) y velocidad de obturación, que no voy a entrar a explicar ya que no se trata de una entrada sobre fotografía, pues bien, era muy difícil cronometrar el tiempo de exposición que debía tener la fotografía, así que se me ocurrió desarrollar una app que pudiera llevar a todas partes, y que introduciendo unos parámetros me diera ese tiempo (con una sencilla regla matemática), pues bien, tardé un par de días y aquí está.

Para empezar, os dejo una captura de cómo se vería (Perdonad por el tamaño xD):

graficos

Bien, como veis tiene una interfaz muy simple, con 4 entradas de texto y un botón para calcular el tiempo de exposición.

Para empezar, nos vamos a Eclipse y creamos un proyecto nuevo de Android, te pedirá el nombre del proyecto, la versión para la que quieres programar etc etc… y a continuación podremos comenzar…

Hay un archivo llamado nombreproyecto.xml, aquí es donde podrás modificar la interfaz, puedes hacerlo tanto gráficamente como escribiendo el código a pelo… Google recomienda que la interfaz se defina en xml y no en Java, por temas de rendimiento y demás.

Bien, hay otro archivo importante que es strings.xlm donde se guardan todas las cadenas de texto de tu programa, para luego referenciarlas desde el nombreproyecto.xml, el archivo se encuentra en res/values, en el árbol de directorios del proyecto.

También encontramos el archivo AndroidManifest.xml, sirve para protección y seguridad, por ejemplo, si queremos que nuesta app utilice recursos de web, o que conecte a un servidor ftp por ejemplo, debemos darle permiso de salida a internet en este archivo.

Y por supuesto el archivo .java, que es donde pondremos nuestro código, situado en src/paquetedelproyecto del árbol de directorios.

arbol

Sigamos, ahora viene la parte más interesante, antes de empezar vamos a definir qué es una actividad (o activity), se trata de una pantalla de la interfaz de usuario, cada app puede tener una o muchas, en este caso sólo tendremos una, que está formada por todo lo que veíamos en la captura anterior.

Por otra parte en el código encontraremos la clase ‘View’, que vendría a ser como una superclase de la que descienden todos los objetos de la interfaz de usuario (botones, texto, cuadros de texto…)

Bien, vamos con el código…

package com.example.fotografia_nocturna;

//import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class Exposicion extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  //Creamos actividad
        setContentView(R.layout.activity_exposicion);   //establecemos la interfaz definida en activity_esposicion.xml
        View boton_calcular=findViewById(R.id.button1);	//Creamos una vista (boton) y lo ponemos a la escucha
        View.OnClickListener lsBoton=new View.OnClickListener() {

        	public void onClick(View arg0){   //codigo ejecutado al presionar el botón

        		TextView txtMensaje=(TextView)findViewById(R.id.textView6);

        		EditText ISO=(EditText)findViewById(R.id.editText1);
        		EditText diag=(EditText)findViewById(R.id.editText2);
        		EditText obt=(EditText)findViewById(R.id.editText3);
        		EditText diag_d=(EditText)findViewById(R.id.editText4);

        		//txtMensaje.setText(ISO.getText());
        		String var_iso=ISO.getText().toString();
        		String var_diag=diag.getText().toString();
        		String var_obt=obt.getText().toString();
        		String var_diag_d=diag_d.getText().toString();

        		int nivel_iso=Integer.parseInt(var_iso);
        		float apertura_diafragma=Float.valueOf(var_diag); 
        		float velocidad_obturacion=Float.valueOf(var_obt);
        		float cantidad_diafragma_deseada=Float.valueOf(var_diag_d);

        		//vector de numero f
        		float f[]={1f,1.4f,2f,2.8f,4f,5.6f,8f,11f,16f,22f,32f,45f};
        		velocidad_obturacion=Calcula_exposicion(nivel_iso,apertura_diafragma,velocidad_obturacion,cantidad_diafragma_deseada,f);

        		String salida=Float.toString(velocidad_obturacion);
        		txtMensaje.setText(salida);

        	}

		};
        boton_calcular.setOnClickListener(lsBoton);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_exposicion, menu);
        return true;
    }

    private float Calcula_exposicion (int nivel_iso, float num_f,float t_exp,float num_f_d, float f[]){

    	//bajamos la ISO a 100 y contamos los pasos que damos
    	int pasos=0;
    	while(nivel_iso!=100){
    		nivel_iso=nivel_iso/2;
    		pasos++;
    	}

    	for(int j=0;j<pasos;j++){  //por cada paso multiplicamos el tiempo de exposición por dos
    		t_exp=t_exp*2;
    	}

    	//llevamos la apertura del diafragma al nivel deseado
    	//comprobamos que los valores introducidos están en el vector o no

    	int pos_a=0;
    	int pos_b=0;

    	for(int i=0;ipos_b){pasos=(pos_a-pos_b);
    		for(int i=0;i<pasos;i++){
    			t_exp=t_exp/2;
    		}
    	}
    	if(pos_a<pos_b){pasos=(pos_b-pos_a);
	    	for(int i=0;i<pasos;i++){
				t_exp=t_exp*2;
			}
    	}

    	if(pos_a==-1 || pos_b==-1){return -1;}

    	return t_exp;

    }

}

No creo que sea necesario explicar lo que hace cada cosa que no está comentada, es más cosa de Java que de Android 🙂

Una posible mejora para la próxima versión sería dar el tiempo de exposición en minutos y segundos, no sólo en segundos 😀

Si teneis alguna cuestión, comentad 😉

Anuncios

Acerca de Darkvidhck

Estudiante de ingeniería informática, haciendo mis pinitos como desarrollador web, programador, gamer y Linuxero. Aficionado a la seguridad. Eterno viciado al conocimiento.
Esta entrada fue publicada en Programación y etiquetada , , , , , . Guarda el enlace permanente.

2 respuestas a Creando nuestra primera app de Android

  1. Tali dijo:

    HTML5, CSS3 y los servidores no me dejan meterle mano a Android!!! jajaja. Buena e interesante, creo que a más de uno le puede interesar, te has planteado ponerla en Google Play?

  2. Darkvidhck dijo:

    Sí me lo planteo, pero pagar la licencia de desarrollador me echa para atrás jaja, pero puede que lo haga (poniendo algo de publicidad para ganarme algo) y me meta más en este mundillo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s