Autore Topic: Camera in full screen con menu  (Letto 347 volte)

Offline g.lai25

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Camera in full screen con menu
« il: 24 Marzo 2016, 21:25:07 CET »
0
Salve a tutti..vorrei creare un activity in cui appaia la preview della camera in full screen e ci fossero dei pulsanti appositamente creati da me che permettono l'avvio di determinate funzionalità..senza avere quindi i pulsanti nativi di fotografia e video nella preview della camera...

Mi potreste dare una mano a capire da dove posso iniziare?

Non riesco a capire come implementare la pura funzione di preview della camera senza che ci siano dei button nativi e non.

grazie nmille!

Offline lore.cioni

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Github
    • cionilorenzo
    • lorecioni
    • Mostra profilo
  • Dispositivo Android:
    Motorola Moto G
  • Play Store ID:
    Lorenzo Cioni
  • Sistema operativo:
    Mac OSX 10.11
Re:Camera in full screen con menu
« Risposta #1 il: 01 Aprile 2016, 02:09:35 CEST »
0
Ciao! Provo a darti una mano, ho già implementato una cosa simile in un'applicazione in ci ho una funzionalità di scanner OCR.

Per prima cosa creati il layout necessario. Io ad esempio ho creato un layout con la preview della fotocamera a schermo intero ed in basso un pulsante per scattare la foto.

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

    <FrameLayout
       android:id="@+id/camera_preview"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:layout_weight="1" />

    <Button
       android:id="@+id/takePhoto"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_margin="@dimen/fab_compat_margin"
       android:src="@drawable/camera"
       android:layout_gravity="bottom|center_horizontal"/>

</RelativeLayout>

La preview sarà mostrata nel FrameLayout. Il layout è ovviamente da te personalizzabile, a me bastava un semplice pulsante.
Per quanto riguarda invece l'implementazione avrai bisogno di una classe che gestisca la preview della fotocamera:

Codice (Java): [Seleziona]
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;

    public CameraPreview(Context context, Camera camera) {
        super(context);
        mCamera = camera;
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
            //TODO gestisci eccezione
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        //Rilascia la camera
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mHolder.getSurface() == null){
            return;
        }
        try {
            mCamera.stopPreview();
        } catch (Exception e){
            //Gestione eccezioni
        }
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (Exception e){
            //TODO gestisci eccezione
        }
    }
}

E, per concludere, di un'Activity con cui effettuare le operazioni che desideri con la fotocamera stessa:

Codice (Java): [Seleziona]
public class CameraActivity extends Activity {

    private Camera.PictureCallback mPicture;
    private Camera mCamera;
    private CameraPreview mPreview;
    private Bitmap photo;
    private Button cameraButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        mCamera = Utils.getCameraInstance();
        mCamera.setDisplayOrientation(90);

        //Impostazione parametri fotocamera
        Camera.Parameters params = mCamera.getParameters();
        List<Camera.Size> sizes = params.getSupportedPictureSizes();
        params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
        params.setPictureSize(800, 480);
        mCamera.setParameters(params);

        mPreview = new CameraPreview(this, mCamera);
        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
        preview.addView(mPreview);

        cameraButton = (Button) findViewById(R.id.takePhoto);
        cameraButton.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //Scatta la foto
                        mCamera.takePicture(null, null, mPicture);  
                        //TODO usa la tua foto qui
                    }
                }
        );
    }

    @Override
    public void onBackPressed() {
        mCamera.release();
        super.onBackPressed();
    }
}

Spero di essere stato più chiaro possibile...e che ti possa essere in qualche modo di aiuto!

Offline g.lai25

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:Camera in full screen con menu
« Risposta #2 il: 01 Aprile 2016, 16:45:14 CEST »
0
Grazie mille!

Sei stato chiarissimo..ho capito finalmente in che direzione devo muovermi ...

 :-) :-)

Offline lore.cioni

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Github
    • cionilorenzo
    • lorecioni
    • Mostra profilo
  • Dispositivo Android:
    Motorola Moto G
  • Play Store ID:
    Lorenzo Cioni
  • Sistema operativo:
    Mac OSX 10.11
Re:Camera in full screen con menu
« Risposta #3 il: 01 Aprile 2016, 17:27:42 CEST »
0
Mi fa molto piacere!
Per qualsiasi cosa chiedi pure, posso anche passarti i sorgenti in caso  :-)