2016-04-09 4 views
0

Я пытаюсь отобразить камеру в приложении для Android, но все, что я получаю, это черный ящик, в котором находится SurfaceView.SurfaceView не отображает камеру

Я использую эту простую схему XML:

<?xml version="1.0" encoding="utf-8"?> 
<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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.lazylayer.photoshoot.MainActivity"> 

    <SurfaceView 
     android:id="@+id/surface_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

С этой деятельности:

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { 

    SurfaceView surfaceView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     surfaceView = (SurfaceView)findViewById(R.id.surface_view); 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     try{ 
      CameraManager cameraManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE); 

      String[] cameras = cameraManager.getCameraIdList(); 
      cameraManager.openCamera(cameras[0], deviceCallback, null); 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) {} 


    CameraDevice.StateCallback deviceCallback = new CameraDevice.StateCallback() { 

     @Override 
     public void onOpened(CameraDevice camera) { 
      try { 
       List<Surface> surfaceList = Collections.singletonList(surfaceView.getHolder().getSurface()); 
       camera.createCaptureSession(surfaceList, sessionCallback, null); 
      } catch (CameraAccessException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onDisconnected(CameraDevice camera) {} 

     @Override 
     public void onError(CameraDevice camera, int error) {} 
    }; 

    CameraCaptureSession.StateCallback sessionCallback = new CameraCaptureSession.StateCallback() { 
     @Override 
     public void onConfigured(CameraCaptureSession session) { 
     } 

     @Override 
     public void onConfigureFailed(CameraCaptureSession session) {} 
    }; 
} 

Вот что получает отображается, когда приложение побежал на мой телефон:

Result

+0

Вы добавили разрешение на манифест ?? –

+0

У меня есть '' –

ответ

0

Я смог исправить проблему, используя FrameLayout вместо SurfaceView

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/camera_view"> 
</FrameLayout> 
Смежные вопросы