首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cwac-camera回调

cwac-camera回调
EN

Stack Overflow用户
提问于 2015-04-02 20:23:21
回答 2查看 334关注 0票数 2

我正在尝试实现一个很棒的库cwac-camera。我似乎想不出如何实现图片的回调,以及如何设置图片的路径。

这是我的CustomCameraFragment公有类CustomCameraFragment扩展了CameraFragment {私有静态最终字符串KEY_USE_FFC = "com.commonsware.cwac.camera.demo.USE_FFC";

代码语言:javascript
复制
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(查看视图){

代码语言:javascript
复制
    try {
        CustomCameraFragment.DemoCameraHost demoCameraHost = customCameraFragment.demoCameraHost;
        PictureTransaction pictureTransaction = new PictureTransaction(demoCameraHost);
        pictureTransaction.needBitmap(true);
        customCameraFragment.takePicture(pictureTransaction);

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

    showCameraPreview(false);

}

但在这段代码中,我需要:-知道图片拍摄时间的回调-当回调被触发时,我需要显示位图,而不是预览-我需要能够设置保存图片的路径和文件名

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

EN

回答 2

Stack Overflow用户

发布于 2015-04-02 21:00:49

您必须覆盖saveImage(PictureTransaction, byte[])函数,有关详细信息,请参阅此处:

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

票数 2
EN

Stack Overflow用户

发布于 2015-04-03 06:09:19

知道照片拍摄时间的回调

引用the documentation

保存照片的默认SimpleCameraHost逻辑使用上面讨论的getPhotoPath()和相关方法。实际保存照片是在CameraHost上调用的saveImage(PictureTransaction,byte[])中完成的,其中SimpleCameraHost有一个saveImage(PictureTransaction,byte[])实现,它将提供的byte[]写出到所需的位置。

欢迎您覆盖saveImage(PictureTransaction、byte[])并对byte[]执行其他操作,例如通过互联网发送它。saveImage(PictureTransaction,byte[])是在后台线程上调用的,因此您不必执行自己的异步工作。

它的另一个用途是找出保存完成的时间,以便您可以使用生成的图像。只需覆盖saveImage(PictureTransaction,byte[]),链接到超类实现,当它返回时,图像就可以使用了。

当触发回调时,我需要显示位图,而不是预览

引用the documentation

默认情况下,拍摄照片的结果是将CameraFragment返回到预览模式,准备拍摄下一张照片。相反,如果您只需要一张图片,或者您希望先将用户发送到UI的其他部分,并且不希望立即重新启动预览,则重写CameraHost中的useSingleShotMode()以返回true。或者,在SimpleCameraHost.Builder上调用useSingleShotMode(),传入默认使用的布尔值。或者,在PictureTransaction上调用useSingleShotMode()来控制单个图片的这一点。

然后,您可能希望在CameraHost中使用自己的saveImage()实现来执行任何操作,而不是重新启动预览。例如,您可以启动另一个活动来对图像执行某些操作。但是,请记住,意图被限制为~1MB,因此通过额外的意图将图像传递给另一个活动可能是不可靠的。您还需要做一些其他的事情,比如(小心地)使用静态数据成员。

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

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

这在the documentation中也有涉及,篇幅足够长,所以我不想在这里引用它。:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29412897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档