Estoy tratando de crear una vista de superficie para una cámara para que se vea en la superficie siempre que esté en la vista de la cámara. Por el momento, todo lo que puedo ver en la vista de mi cámara es una vista en pantalla negra. He intentado buscar en Google y aquí, pero hasta ahora no he encontrado lo que estoy buscando. Cualquiera me puede sugerir alguna idea.Vista de superficie de la cámara Android
Respuesta
He escrito una clase esto puede ayudarte
public class Preview_can_work extends Activity {
private SurfaceView surface_view;
private Camera mCamera;
SurfaceHolder.Callback sh_ob = null;
SurfaceHolder surface_holder = null;
SurfaceHolder.Callback sh_callback = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
surface_view = new SurfaceView(getApplicationContext());
addContentView(surface_view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
if (surface_holder == null) {
surface_holder = surface_view.getHolder();
}
sh_callback = my_callback();
surface_holder.addCallback(sh_callback);
}
SurfaceHolder.Callback my_callback() {
SurfaceHolder.Callback ob1 = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mCamera.startPreview();
}
};
return ob1;
}
}
en su copia del archivo de manifiesto el código de autorización cámara
<uses-permission android:name="android.permission.CAMERA"/>
Explicación:
SurfaceView es un tipo de vista que contiene una SurfaceHolder. SurfaceHolder contiene la superficie sobre la cual podemos mostrar nuestros medios (generalmente marcos).
mCamera es un objeto de cámara que contendrá la instancia de la cámara.
Cuando desee mantener la instancia predeterminada de la cámara, simplemente puede llamar a Camera.open();
Cámara mCámara = Camera.open();
Ahora tiene la cámara abierta o está teniendo una instancia predeterminada de la cámara. Ahora necesita capturar fotogramas de la cámara y mostrarlos en una superficie. Pero no puede mostrarlo sin
superficie. Aquí SurfaceView proporciona SurfaceHolder y SurfaceHolder proporciona una superficie para mostrar los marcos de la cámara. Ahora cuando se creará la superficie, tres funciones de devolución de llamada serán
llamadas.
1. public void surfaceCreated(SurfaceHolder holder)
2. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
3. public void surfaceDestroyed(SurfaceHolder holder)
Nota: - La superficie se destruirá cuando la aplicación entre en pausa.
surfaceCreated: surfaceCreated es una función de devolución de llamada que se ejecutará cuando se cree su superficie. En esto, puede abrir su cámara y establecer otros atributos.
surfaceChanged: Esto se llamará al menos una vez cuando se creará su superficie. Después de eso se llamará cada vez que cambie su superficie (en la rotación del dispositivo). Aquí puede
iniciar su vista previa porque su superficie ya ha creado.
surfaceDestroyed: Esto se ejecutará cada vez que su superficie se destruya.Ahora bien, si no tiene superficie, entonces puede exhibir los marcos de su cámara, así que he lanzado la cámara usando
mCamera.release(). Esto es muy importante porque si tu actividad estará en pausa y cualquier otra actividad intenta abrir la cámara, entonces no podrá abrirlo ya que tienes
ya abierta. La cámara es un recurso compartido, por lo que solo una aplicación puede usarla una vez. Así que recuerde una cosa cada vez que abra una cámara, luego siempre libérela.
stopPreview: Cuando inicia la vista previa, la cámara comienza a capturar los fotogramas y mostrarlos en una superficie. Ahora, si su superficie se ha destruido, debe dejar de capturar los marcos
desde la cámara, por lo que debe llamar a mCamera.stopPreview.
Hacer Shure ha añadido el permiso:
<uses-permission android:name="android.permission.CAMERA"/>
también estas propiedades de la ventana:
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
publicar algunos de código si eso no funciona con el fin de ayudarle
Gracias, ya he agregado el permiso como sugirió; y estaba pensando en usar 'surfaceChanged'? Por el momento, todo lo que puedo ver en la superficie de mi cámara es negro ... No entiendo por qué. – Kitaro
- 1. cámara Android - aplicación aprobada superficie de anulación
- 2. cómo cambiar la cámara Android al retrato en la vista de superficie?
- 3. Cámara Vista de superficie Las imágenes se muestran estiradas
- 4. lienzo transparente de Android (vista de superficie)
- 5. Android: Cómo agregar un botón en la vista de superficie
- 6. Android cámara vista previa tutorial
- 7. Cómo sobrescribir una vista personalizada (vista de superficie)
- 8. Cómo configurar el tamaño de la vista de superficie personalizada
- 9. Vista previa de la cámara Android se ve extraño
- 10. Android: aplique efectos OpenGL a la cámara
- 11. Android dibujar en cámara vista previa
- 12. en android, reproduzca la vista previa de la cámara en una vista
- 13. Cómo grabar el video usando la vista previa de la cámara en TextureView
- 14. Detección de color con la cámara Android
- 15. Cambio de tamaño de la vista previa de la cámara
- 16. Android - Previsualización de la cámara
- 17. Android: ¿Cómo inicializar MediaRecorder sin una superficie válida para la vista previa del video?
- 18. Medición de las intensidades de luz de la cámara Android
- 19. ¿Cómo guardar la imagen junto con la vista de superficie en Android?
- 20. La cámara Android se congela después de tomar una foto
- 21. Android: ¿Obtener el nombre de archivo de la cámara?
- 22. cámara androide de vista previa Rotación
- 23. Cámara personalizada Android
- 24. ¿Cómo recuperar la vista previa de la cámara de la suspensión?
- 25. Android: ¿cómo mostrar la vista previa de la cámara con devolución de llamada?
- 26. Superposición de un diseño de Android en una vista de superficie
- 27. Zxing - Cambio de la vista de la cámara -90 grados
- 28. cámara Android girar
- 29. Marco de vista previa de la cámara de Android Marca de tiempo
- 30. vista de superposición de cámara, solo para una vista previa?
Gracias Bharat, ¡Definitivamente voy a dar esto! gracias de nuevo. ¿Alguien ha conocido un buen artículo en el que pueda leer sobre "La cámara no funciona cuando se ejecuta en emulador"? ¿Es verdad todavía? – Kitaro
De hecho, mientras creas el emulador necesitas agregar una cámara, entonces creo que funcionará. Trataré de avisarte ... –
Bien, ¿entonces no necesitamos tener un dispositivo para usar la cámara para ver en vivo? Cos parte del artículo que leí diciendo que no podemos ejecutar la cámara en el emulador, pero no estoy seguro de si esto se ha resuelto. Por favor hagamelo saber. Gracias. – Kitaro