Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

PhotoPicker

PhotoPicker captura foto o graba video (con/sin audio) usando la cámara del dispositivo, con efectos (brillo/contraste/nitidez), cambio de cámara y confirmación opcional. Sigue el patrón de los pickers (ver Picker), pero el resultado es una ruta de archivo — o una cadena de error.

🔴 · Paquete: dev.crossfly.ui.picker · Extiende: Picker implements GdxCamera.Listener · Hardware: cámara

Cuándo usar

  • Tomar una foto o grabar un video dentro de la app.

Cuándo NO usar

Apariencia

Preview de cámara a pantalla completa (fondo negro, sin marco) con botones circulares semitransparentes: Cancelar (X), Capturar/Grabar (central), Cambiar cámara y Config/Pause. En el modo foto con confirmación, una pantalla confirmar/rehacer.

Ejemplo completo (copiar, pegar y ejecutar)

PhotoPicker es un overlay de cámara — para abrirlo, dispáralo desde un Button. El ejemplo reutiliza el uso básico y muestra la ruta devuelta (o el error) en un Label.

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.picker.*;

/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label saida = new Label("Nenhuma foto ainda");
      add(LAY_AUTO, saida);

      Button tirarFoto = new Button("Tirar foto")
         .onAction(c ->
         {
            PhotoPicker pp = new PhotoPicker(PhotoPicker.Preview.PHOTO);
            pp.show(answer ->
            {
               String caminho = (String) answer;
               if (pp.isError())
                  saida.setText("Falha na câmera: " + caminho);
               else
                  saida.setText("Foto salva em: " + caminho);
            });
         });
      add(LAY_AUTO, tirarFoto);
   }
}

Los fragmentos de abajo muestran solo el núcleo (lo que va dentro de onShow()). Para ejecutar, colócalos en el esqueleto MainWindow de arriba.

Uso básico

PhotoPicker pp = new PhotoPicker(PhotoPicker.Preview.PHOTO);
pp.show(answer ->
{
   String caminho = (String) answer;
   if (pp.isError())
      new Alert("Falha na câmera", caminho, "OK").show();
   else
      Debug.log("Foto salva em: " + caminho);
});

Constructores

Constructor Descripción
PhotoPicker(Preview type) Modo: Preview.PHOTO, Preview.MUTED_VIDEO o Preview.AUDIO_VIDEO.

Propiedades y personalización

Campo Tipo Default Qué hace
PhotoPicker.defaultJpegQuality (estático) int 90 Calidad JPG al guardar la foto.
PhotoPicker.showConfirmation (estático) boolean true Pantalla confirmar/rehacer en el modo foto.
videoQuality Camera.AVQuality HIGH Calidad del video.
videoTimeLimit int (s) 0 Límite de grabación (0 = sin límite).

Callbacks y eventos

Callback Cuándo se dispara
show(onAnswer) al cerrar, entrega la String de la ruta (o "ERROR: ...").

Resultado (importante)

getAnswer() devuelve la ruta del archivo (JPG de la foto o MP4 del video). En caso de error de cámara, devuelve la cadena "ERROR: ...".

⚠️ Siempre verifica isError() antes de tratar el valor como ruta — getAnswer() mezcla ruta y mensaje de error.

Estados

  • onAppPause/onAppResume paran/reanudan la cámara; onRemove para todo y limpia el listener.
  • Error de cámara → graba answer = "ERROR: ..." y cierra.

Video con audio y límite de 30s

PhotoPicker vp = new PhotoPicker(PhotoPicker.Preview.AUDIO_VIDEO);
vp.videoTimeLimit = 30;
vp.show(a -> Debug.log("MP4 em: " + a));

Buenas prácticas

  • Verifica isError() antes de abrir el archivo devuelto.
  • No reutilices la misma instancia tras hide() — los recursos de cámara se liberan al cerrar.

Errores comunes

  • Tratar answer como ruta sin verificar isError() — puede ser "ERROR: ...".
  • Asumir una ruta portable — la ruta de video es fija en /sdcard/... (Android).

Ver también

¿Te resultó útil esta página?