Documente Academic
Documente Profesional
Documente Cultură
galera)
En el primer captulo del curso aprendimos a construir un lector de feeds simple; el
segundo captulo fue sobre UI en Android y aumentar la funcionalidad de un lector de
feeds; en el tercer captulo trabajaremos con el hardware de los telfonos y empezaremos
con el manejo de la cmara.
Disposicin inicial
Empezaremos descargando el cdigo que debe importarse hacia un proyecto nuevo.
Trabajaremos sobre un telfono con Android y cmara para desarrollar el ejemplo de este
artculo. Para el deployment hacia el telfono es necesario que el sistema operativo lo
reconozca y adems debe colocarse en el manifest como una propiedad de la etiqueta
<application> el valor android:debuggable="true".
La etiqueta debe lucir de la siguiente forma:
?
<application android:icon="@drawable/icon"
1android:label="@string/app_name" android:debuggable="true">
En la parte de diseo vamos a empezar con un RelativeLayout, el archivo
/res/layout/main.xmldebe estar as:
?
1 <!--?xml version="1.0" encoding="utf-8"?-->
Diseo
Nuestro diseo tendr un botn para adquirir la imagen un RadioGroup que contendr a 3
botones y un ImageView. Los 3 botones sern seleccionar de donde proviene la imagen ya
sea de la cmara (como vista previa o como imagen completa) o de la galera.
El cdigo completo del layout es el siguente:
?
1 <!--?xml version="1.0" encoding="utf-8"?-->
2 <button>
3 </button>
Hemos orientado el botn hacia la derecha y el RadioGroup hacia la izquierda. Luego el
ImageView abajo del RadioGroup.
El diseo de interfaces de usuario en ocasiones se vuelve complicado con eclipse por ello
utilizaremos la herramienta gratuita DroidDraw que permite exportar e importar archivos
XML para luego solo colocarlos en el archivo de diseo en eclipse, adems tiene
ejecutables para Windows, Linux y OS X.
Asignamos el cdigo a tomar fotografa, este cdigo junto al intent se utilizarn adelante
para iniciar la Activity.
?
1
if (data != null) {
} else {
5
En el caso de una vista previa, obtenemos el extra data del intent y lo mostramos en el
ImageView:
?
1 if (data.hasExtra("data")) {
2 ImageView iv = (ImageView)findViewById(R.id.imgView);
3 iv.setImageBitmap((Bitmap) data.getParcelableExtra("data"));
4}
En el caso de una fotografa completa, a partir del nombre del archivo ya definido lo
buscamos y creamos el bitmap para el ImageView:
?
1 ImageView iv = (ImageView)findViewById(R.id.imgView);
2 iv.setImageBitmap(BitmapFactory.decodeFile(name));
Si quisiramos incluir esa imagen en nuestra galera, utilizamos un
MediaScannerConnectionClient.
?
0
1
0
2
0
3 new MediaScannerConnectionClient() {
0 private MediaScannerConnection msc = null; {
4 msc = new MediaScannerConnection(getApplicationContext(), this);
0 msc.connect();
5 }
public void onMediaScannerConnected() {
0 msc.scanFile(fileName, null);
6 }
0 public void onScanCompleted(String path, Uri uri) {
7 msc.disconnect();
0 }};
8
0
9
1
0
11
Si viene de la galera recibimos el URI de la imagen y construimos un Bitmap a partir de un
stream de bytes:
?
1
selectedImage = data.getData();
2 Uri
InputStream is;
3 try {
4 is = getContentResolver().openInputStream(selectedImage);
5 BufferedInputStream bis = new BufferedInputStream(is);
6 Bitmap bitmap = BitmapFactory.decodeStream(bis);
ImageView iv = (ImageView)findViewById(R.id.imgView);
7 iv.setImageBitmap(bitmap);
8 } catch (FileNotFoundException e) {}
9
Si estamos utilizando la cmara la vista ser de la siguiente forma:
Descarga:
Puedes descargar el cdigo de la aplicacin completa y funcional en: Trabajado con
imgenes (cmara y galera).
Conclusin
comunes predefinidas nos facilitan muchas tareas, en este caso no fue necesario
accesar directamente el hardware de la cmara si no pudimos tomar una fotografa
de una manera ms sencilla. Algo similar sucede con el acceso a la galera de fotos.