Autore Topic: Come far cambiare camera da front a back in surfaceview tramite un button  (Letto 566 volte)

Offline xwilly84

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei p9 lite
  • Play Store ID:
    Luca Chirichella
  • Sistema operativo:
    Win 8.1 x64
Allora ho il seguente codice

Codice (Java): [Seleziona]
import java.io.IOException;
import com.camera.R;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
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;
import android.widget.Toast;


public class CameraActivity extends Activity implements SurfaceHolder.Callback {
       
        SurfaceView mSurfaceView;
        SurfaceHolder mSurfaceHolder;
        Button button_camera, button_switch;
        Camera mCamera;
        boolean mPreviewRunning;
       
       
       
       

       
        @SuppressWarnings("deprecation")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                super.onCreate(savedInstanceState);
                setContentView(R.layout.layout_camera);
               
               
                getWindow().setFormat(PixelFormat.TRANSLUCENT);
                mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
        mSurfaceHolder = mSurfaceView.getHolder();      
        mSurfaceHolder.addCallback(this);  
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       
       
               
               
                Button button_camera = (Button) findViewById(R.id.button_camera);
                button_camera.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                       
                }
        });
       
        Button button_switch = (Button) findViewById(R.id.button_switch);
        button_switch.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                       
                }
                       
        });
       
             
               
               
        }
       
       
   
        public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
               
                Toast.makeText(CameraActivity.this, "surfaceChanged", Toast.LENGTH_LONG).show();
               
                       
                if(mPreviewRunning)
                        mCamera.stopPreview();
                       
                       
                        try{
                                mCamera.setPreviewDisplay(holder);
                                mCamera.startPreview();
                                mPreviewRunning= true;
                                } catch (IOException e) {
                                         e.printStackTrace();
                                }
                         
                         
                       
           
        }


        public void surfaceCreated(SurfaceHolder holder) {
               
                Toast.makeText(CameraActivity.this, "surfaceCreated", Toast.LENGTH_LONG).show();
               
                mCamera= Camera.open(0);
                mCamera.setDisplayOrientation(90);
               
        }


        public void surfaceDestroyed(SurfaceHolder holder) {
                Toast.makeText(CameraActivity.this, "surfaceDestroyed", Toast.LENGTH_LONG).show();
                mCamera.stopPreview();
                mPreviewRunning= false;
                mCamera.release();
        }

       
       
       
}

Funziona perfettamente inoltre tramite i Toast riesco a vedere quando vengono chiamati i metodi SurfaceHolder.Callback, come si vede da codice se in surfaceCreated cambio Camera.open(0) in Camera.open(1), ogni volta che apro l'activity mi apre in modalità front se lascio 0 apre in modalità back.

Chiedo se esiste un modo per dire che quando clicco su button_switch mi deve passare ad un altra modalità...


Esempio: se all'apertura setto Camera.open(0)...quando clicco su button_switch devi riaprirmi la Preview nella mia surfaceview in Camera.open(1) e viceversa...

Grazie in anticipo.... :D