2015-04-02 57 views
2

我試圖實現美妙的庫cwac相機。 我似乎無法弄清楚如何實現圖片的回調以及如何設置圖片的路徑。從cwac相機回撥

這是我CustomCameraFragment 公共類CustomCameraFragment擴展CameraFragment { 私有靜態最後絃樂KEY_USE_FFC = 「com.commonsware.cwac.camera.demo.USE_FFC」;

public static CustomCameraFragment newInstance(boolean useFFC) { 
    CustomCameraFragment f = new CustomCameraFragment(); 
    Bundle args = new Bundle(); 

    args.putBoolean(KEY_USE_FFC, useFFC); 
    f.setArguments(args); 
    return (f); 
} 

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

    SimpleCameraHost.Builder builder = 
      new SimpleCameraHost.Builder(new DemoCameraHost(getActivity())); 
    builder.useFullBleedPreview(true); 
    setHost(builder.build()); 
    //setHost(builder.useFullBleedPreview(true).build()); 
} 

public class DemoCameraHost extends SimpleCameraHost { 
    public DemoCameraHost(Context _ctxt) { 
     super(_ctxt); 
    } 

    @Override 
    public boolean useFrontFacingCamera() { 
     if (getArguments() == null) { 
      return (false); 
     } 

     return (getArguments().getBoolean(KEY_USE_FFC)); 
    } 

    @Override 
    public boolean useSingleShotMode() { 
     return true; 
    } 

    @Override 
    public void onCameraFail(CameraHost.FailureReason reason) { 
     super.onCameraFail(reason); 

     Toast.makeText(getActivity(), 
       "Sorry, but you cannot use the camera now!", 
       Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void saveImage(PictureTransaction xact, Bitmap bitmap) { 
     super.saveImage(xact, bitmap); 
    } 
} 

}

我用它在另一個片段中的FrameLayout,但我不能找出正確執行回調。

的片段,其中我使用CustomCameraFragment: 我有一個按鈕,拍攝照片: @OnClick(R.id.btnTakePicture) 公共無效takePicture(查看視圖){

try { 
     CustomCameraFragment.DemoCameraHost demoCameraHost = customCameraFragment.demoCameraHost; 
     PictureTransaction pictureTransaction = new PictureTransaction(demoCameraHost); 
     pictureTransaction.needBitmap(true); 
     customCameraFragment.takePicture(pictureTransaction); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    showCameraPreview(false); 

} 

但在這個片段我需要: - 回調知道何時拍攝照片 - 當回調被觸發時,我需要顯示位圖,而不是預覽 - 我需要能夠設置路徑&文件名在哪裏保存圖片

這3件事情我不清楚。

+0

我現在在路上,但我會在今天晚些時候將您指向文檔的正確部分。 – CommonsWare 2015-04-02 16:03:02

+0

好的,謝謝!現在我正在使用otto eventbus修復回調:) – TomCB 2015-04-02 16:17:34

回答

2

您必須重寫saveImage(PictureTransaction, byte[])功能, 在這裏看到更多的信息:

https://github.com/commonsguy/cwac-camera#overriding-photo-saving

+0

在DemoCameraHost中,我嘗試過: @Override public void saveImage(PictureTransaction xact,Bitmap bitmap){Logger.d(TAG,「saveImage」); super.saveImage(xact,bitmap); } 但是當我在我的片段上調用takePicture時,它不會被調用。 – TomCB 2015-04-02 13:15:37

+0

那是因爲我發佈的鏈接提到: 「默認情況下,將調用saveImage(PictureTransaction,byte []),而不是saveImage PictureTransaction,Bitmap)。要改變它,在你的PictureTransaction上調用needBitmap(boolean)和/或needByteArray(boolean),將PictureTransaction傳遞給takePicture()。 – 2015-04-02 13:20:42

+0

確實有效,這是一個很大的進步。儘管如此,我還是不太瞭解這個CameraFragment和parentFragment之間的通信,我需要一個回調? – TomCB 2015-04-02 13:36:24

1

的回調,知道什麼時候該照片拍攝

報價the documentation

保存照片的默認SimpleCameraHost邏輯使用上面討論的getPhotoPath()和相關方法。實際上,保存照片是在saveImage(PictureTransaction,byte [])中完成的,在CameraHost上調用,其中SimpleCameraHost具有saveImage(PictureTransaction,byte [])實現,它將提供的byte []寫出到所需的位置。

歡迎您重寫saveImage(PictureTransaction,byte [])並對byte []執行其他操作,例如通過Internet發送它。 saveImage(PictureTransaction,byte [])在後臺線程上被調用,所以你不必做自己的異步工作。

另一個用途是找出保存完成的時間,以便您可以使用生成的圖像。只需將saveImage(PictureTransaction,byte [])覆蓋鏈接到超類實現,並在返回時,圖像即可使用。


當回調被解僱,我需要的,而不是預覽

報價the documentation顯示位圖,:

默認情況下,取結果一張圖片是將CameraFragment返回到預覽模式,準備拍攝下一張照片。相反,如果您只需要一張圖片,或者您想先將用戶發送給其他某個用戶界面,並且不希望預覽立即再次啓動,請在CameraHost中覆蓋useSingleShotMode()以返回true。或者,在您的SimpleCameraHost.Builder上調用useSingleShotMode(),傳入一個布爾值以默認使用。或者,在您的PictureTransaction上調用useSingleShotMode(),以便爲單個圖片控制此選項。

然後,您可能會想要在CameraHost中使用自己的saveImage()實現來執行任何您想要的操作,而無需重新啓動預覽。例如,你可以開始另一個活動來對圖像做些什麼。但是,請記住,意圖限制在〜1MB,因此通過Intent extra將圖像傳遞給另一個活動可能不可靠。您將需要做其他事情,例如(小心地)使用靜態數據成員。

預覽模式將在CameraFragment的onPause()/ onResume()循環後自動重新啓用,或者您可以在CameraFragment(或CameraView)上調用restartPreview()。


我需要能夠設置路徑& filename其中,以保存在the documentation覆蓋以及圖片

,在一些足夠長的時間,我不覺得像在這裏引用它。 :-)

+0

非常感謝您的信息!我認爲我的大問題是我在我的父代片段中使用customCameraFragment作爲「視圖」。因此,我無法獲得這兩個片段之間的通信(父片段如何知道customCameraFragment中的saveImage()?我應該做的是使用customCameraFragment作爲我的實際片段:) – TomCB 2015-04-03 06:18:50

+0

@TomCB:「how父片段是否知道customCameraFragment中的saveImage()?「 - 自定義攝像機片段會調用其父級方法 – CommonsWare 2015-04-03 10:33:40

+0

但是那麼CustomCameraFragment不會是通用的嗎?我無法將CustomCameraFragment看作一個」視圖「,我可以在需要預覽攝像機的任何地方使用它。 – TomCB 2015-04-06 12:19:14