2013-04-12 39 views
5

我試圖創建一個訪問Android相機,獲取框架(圖像),處理它,然後重新啓動該過程的應用程序,同時在屏幕上提供平滑預覽。setOneShotPreviewCallback不回撥我的方法

我這樣做是通過調用camera.setOneShotPreviewCallback(...)來獲得一個幀,處理在我的回調中收到的數據,然後再次調用setOneShotPreviewCallback

問題是,我不能通過將setOneShotPreviewCallback放在主要活動的onResume()函數中來啓動該過程。如果我這樣做,我的回調從未被調用。

請參見下面的測試代碼:

public void onResume() { 
    super.onResume(); 
    camera = getCameraInstance(); 

    cameraPreviewSurface = new CameraPreview(this, camera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.removeAllViews(); 
    preview.addView(cameraPreviewSurface); 
    camera.setOneShotPreviewCallback(cameraPreviewCallback); 

    Button button = (Button) findViewById(R.id.button_capture); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      camera.setOneShotPreviewCallback(cameraPreviewCallback); 
     } 
    }); 
} 

應用程序啓動時,回調不會被調用,但只要按下按鈕,我得到一個回調。

我已經嘗試在我的CameraPreview類中使用setOneShotPreviewCallback,在camera.startPreview();之後,但仍然沒有調用我的方法。

回答

4

我發現了這個問題。出於某種原因,必須在預覽表面初始化後設置回調。

就我而言,由於我使用的是自定義SurfaceView,因此我必須在surfaceCreatedsurfaceChanged函數中應用回調函數。

camera.setPreviewDisplay(surfaceHolder); 
camera.startPreview(); 
camera.setOneShotPreviewCallback(cameraPreviewCallback);