El código que he escrito es muy sencillo para que todos lo podáis entender bien, no obstante podría ser mucho más extendido como por ejemplo poner autofocus o modificar el tamaño del SrufaceView según el hardware de la cámara.
Para empezar solo decir que el SurfaceView se comporta igual que un layout solo que es bastante más complejo. Empecemos:
Como siempre os traigo el código totalmente comentado para que sea mucho más simple.
Primero creamos el layout que consta del SurfaceView y de un botón que ará la función de encender o apagar la cámara:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <SurfaceView android:id="@+id/view_camera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> <Button android:id="@+id/boton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:text="start" /> </RelativeLayout>Ahora veremos el java, para entenderlo totalmente ará falta ver más de un tutorial de los que publiqué anteriormente.
package com.tywors.camara; import java.io.IOException; import android.app.Activity; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { //Boton en encender/apagar private Button boton; //Layout donde se verá la imagen de la camara private SurfaceView surfaceView; //Es el modulo que comunica la camara con el layout private SurfaceHolder surfaceHolder; //Camara librería de Hardware private Camera camara; //Simplemente para controlar si esta on/off private boolean encendida; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //relacionamos con el xml boton = (Button)findViewById(R.id.boton); surfaceView = (SurfaceView) findViewById(R.id.view_camera); //Le indicamos cual será el destino (surfaceview) surfaceHolder = surfaceView.getHolder(); //la pp se iniciara en off encendida = false; //al presionar el boton boton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { //Lamamos a la funcion de la camara que hemos creado startCamara(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } private void startCamara() throws IOException{ //Si la camara esta apagada if(!encendida){ //pillamos el control del hardware de la camara camara = Camera.open(); //Enlazamos el hardware con el surfaceHolder camara.setPreviewDisplay(surfaceHolder); //Encendemos todo camara.startPreview(); encendida = true; }else{ //paramos la camara camara.stopPreview(); //liberamos el hardware camara.release(); //Sabemos que ya esta en off encendida = false; } } }
sobre todo no hay que olvidarse de poner el permiso para uilizar la cámara del teléfono, añadiremos esta línea en el manifes.xml encima del tag aplicacion:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" />
Espero que os sirva de ayuda y también añado el projecto para eclipse por si queréis descargarlo:
Muchas grácias a todos!!!
Espero vuestros comentarios!!!
Y para la front camera ?
ResponderEliminarEn esta línea:
Eliminarcamara = Camera.open();
añade algo así:
camara = Camera.open(Camera.FRONT); (no estoy seguro pero lo que te diga eclipse)
¿Cómo puedo ver lo que enfoca la cámara en otro dispositivo Android? Conectados por WiFi Direct.
ResponderEliminarveo la camara horizontal como puedo cambiarla a vertical
ResponderEliminarporfavor!!!!!!!!!!!!!!!!!!!!!
ResponderEliminar