Uso De Camara y Galeria fotos Xamarin.Android
Saludos a todos, en esta entrada estaremos realizando un proyecto que implica el uso de la cámara de nuestro dispositivo, así como mostrar todas las imagenes capturadas en una galería. Para todos aquellos a quienes les sea útil; Comenzamos creando un nuevo proyecto:
Como requerimos el uso de la cámara y escribir en nuestra memoria, daremos de alta los siguientes permisos, así que abrimos nuestro archivo manifest:
Nuestro archivo AndroidManifiest.xml quedaría de la siguiente forma:
Enseguida abrimos nuestro archivo Layout Main.axml para agregar los controles con los que trabajaremos:
La vista Fuente de nuestro Main.axml quedaría de la siguiente manera:
Nuestra vista gráfica seria la siguiente; Vemos un Button, un ImageView, también ImageButton, así como una Gallery:
Como siguiente paso crearemos dos clases que nos permitirán que nuestra App funcione adecuadamente:
La siguiente clase es:
Por el momento las dejaremos así; ahora abrimos nuestro actividad principal MainActivity.cs, verificamos que tengamos las siguientes librerías:
Enseguida declaramos las siguientes variables:
Las cuales nos permitirán crear nuestro archivo de imagen así como de crear un directorio para las imagenes, así mismo para mostrar la imagen capturada, y para hacer visible la galería:
Enseguida declaramos el método IsThereAnAppToTakePictures
Este método permite a nuestra app verificar que tiene permisos para capturar imagenes.
Enseguida declaramos el método CreateDirectoryForPictures:
Este método permite comprobar si el directorio existe, si no existe lo crea.
Enseguida declaramos el siguiente método el cual nos permitirá lanzar el intent que hará que nuestra app capture imagenes:
Una vez que se entrada a este método, como se lanza una nueva actividad para verificar el resultado usamos el siguiente método sobrecargado:
En este método verificamos el resultado, si es true cargamos la imagen a imageview, pero primero comprobamos los archivos que se tienen en el directorio, así mismo pasamos el ultimo elemento del array a una variable de tipo File, esta instancia hace referencia al método LoadAndResizeBitmap de la clase BitmapHelpers el cual nos permite disminuir las dimensiones de la imagen para que no consuma demasiada memoria al mostrarla.
A continuación vemos como hacemos instancia de los métodos que hemos declarado previamente en OnCreate:
Este método lo que realiza es hacer una comprobacion si contamos con los permisos para usar la cámara, para ello usa el método IsThereAnAppToTakePictures, enseguida crea el directorio para las imagenes usando el método CreateDirectoryForPictures.
Enseguida hacemos instancia de nuestros controles de nuestro layout, en el evento Click del botón hacemos lo siguiente:
Comprobamos la cantidad de elementos que contiene nuestro directorio este tamaño nos permitira crear de ese tamaño nuestra galería, enseguida creamos nuestra instancia de Gallery, pasamos el adapter que traerá todos los elementos para ello usamos la clase ImageAdapter, misma que en su constructor toma como argumentos dos valores, el contexto donde sera usado, en este caso usamos la palabra reservada this, así mismo pasamos el valor que contendra el arreglo, el cual es el total de elementos contenidos dentro del directorio donde se guardan las imágenes capturadas. Enseguida tenemos el evento ItemClick el cual lo único que hace es mostrar un mensaje emergente al usuario sobre que elemento de la galería ha sido seleccionado.
Ahora verificamos que nuestras clases contengan los siguientes elementos la clase ImageAdapter deberá contener las siguientes librerías:
Enseguida creamos una instancia que hereda los atributos de la clase BaseAdapter, así mismo especificamos el paso de parámetros que recibirá en el constructor de la clase:
También declaramos los siguientes métodos, estos métodos permiten determinar el numero de elementos que contiene nuestro array, así mismo declaramos nuestro arreglo:
Enseguida tenemos el método GetView, el cual nos regresa la galería de fotos:
En este método volvemos a obtener el contenido del directorio, recorremos nuestro array, convertimos la instancia a una imagen bitmap, creamos una instancia de imageview con el contexto que se recibe en el constructor, el cual es donde es invocado, a nuestra imageview le agregamos tres parámetros, el primero es la imagen BitMap, el siguiente son los parámetros de ancho y alto que contendrá, definimos que sea largo 100, ancho 100. Especificamos una escala, y retornamos nuestro imageView.
Para la otra clase, la clase BitmapHelpers seria así, este código esta en los ejemplos de uso de la documentación oficial de Xamarin:
Como veran es muy sencillo de entender el funcionamiento.
Ya que tenemos todo, compilamos y ejecutamos nuestra aplicacion.
Los resultados seran semejantes a estos:
Vista de nuestro app ejecutandose
Vista de nuestra camara lanzando el intent de la camara:
Vista de la captura de la imagen tomada en el ImageView.
Vista de los elementos que contiene la galeria en este caso, solo una:
Aqui la galeria ya contiene dos elementos, que son las imagenes que se han guardado en el directorio:
Seria todo por esta entrada, cualquier duda, deja tu comentario.
Sigueme en twitter:
https://twitter.com/OsvaldoSan
Consulta las referencias:
http://docs.xamarin.com/guides/android/user_interface/gallery/
http://docs.xamarin.com/recipes/android/other_ux/camera_intent/take_a_picture_and_save_using_camera_app/
Excelente aporte.
ResponderEliminar