来自cwac-camera的回调

时间:2015-04-02 12:23:21

标签: android commonsware-cwac

我正在尝试实施精彩的图书馆cwac-camera。 我似乎无法弄清楚如何为图片实现回调以及如何设置图片的路径。

这是我的CustomCameraFragment 公共类CustomCameraFragment扩展了CameraFragment {     private static final String 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)     public void 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);

}

但在这个片段中,我需要: - 回调以了解拍摄照片的时间 - 当触发回调时,我需要显示位图而不是预览 - 我需要能够设置路径&文件名保存图片的位置

这三件事对我来说都不清楚。

2 个答案:

答案 0 :(得分:2)

您必须覆盖saveImage(PictureTransaction, byte[])功能, 有关更多信息,请参阅此处:

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

答案 1 :(得分: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()实现来执行任何操作,而不是重新启动预览。例如,您可以启动另一个活动来对图像执行某些操作。但是,请记住,Intent限制在大约1MB,因此通过Intent extra将图像传递给另一个活动可能是不可靠的。您将需要执行其他操作,例如(小心)使用静态数据成员。

     

预览模式将在CameraFragment的onPause()/ onResume()循环后自动重新启用,或者您可以在CameraFragment(或CameraView)上调用restartPreview()。


  

我需要能够设置路径&文件名保存图片的位置

这也包含在the documentation中,足够长,以至于我不想在这里引用它。 : - )