当前位置: 首页 > 知识库问答 >
问题:

CWAC相机-实现切换相机按钮

阳福
2023-03-14

我正在尝试用我的自定义gui创建一个切换相机按钮。在我的CustomCam Extendes SherlockFragmentActivity中,我有一个名为onSwitch()的方法,该方法是从xml android调用的:onClick=“onSwitch”

方法如下:

public void onClickSwitchButton(View view) {
        if (current == std) {
            ffc = CustomCamFragment.newInstance(true);
            current = ffc;
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, current).commit();
            isFrontCamera=true;

            return;

        }


        if (current == ffc) {
            std = CustomCamFragment.newInstance(false);
            current = std;
            isFrontCamera=false;
        }

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, current).commit();
    }

我知道该方法会因为断点和日志语句而触发,但我的屏幕只是变黑,然后返回到相同的std视图。

注意:我意识到我必须检测手机是否有多个摄像头,或者根本没有摄像头。但就目前而言,我不会发布这个应用程序。我只是想自己用。

我的CustomCamFragment:

public class CustomCamFragment extends CameraFragment {

private static final String KEY_USE_FFC = "com.commonsware.cwac.camera.demo.USE_FFC";

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

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

共有3个答案

经和洽
2023-03-14

我想在不推新片段的情况下切换前/后摄像头。在研究了CameraView和CameraHost(SimpleCameraHost)的代码之后,我认为最好的解决方案是删除当前的CameraView实例并添加一个新实例:

public class MyCameraFragment extends CameraFragment {

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    addCameraView(view);
}

private void addCameraView(View view) {
    FrameLayout frame = (FrameLayout)v.findViewById(R.id.cameraFrame);
    frame.removeAllViews();
    cameraView = new CameraView(getActivity());
    cameraView.setHost(cameraHost = new MyCameraHost(getActivity()));
    setCameraView(cameraView);
    frame.addView(cameraView);
}

private void doSwitchCamera() {
    // do some change to the settings.
    useFrontFacingCamera = !useFrontFacingCamera;
    if (null != cameraView) {
        cameraView.onPause();
    }
    addCameraView(getView());
 cameraView.onResume();
}

}

我希望这可以帮助那些希望保持其片段不变/简单代码的人。

充昌勋
2023-03-14

要回答您关于嵌入片段的最后一条评论:我已经禁用了抛出新的IllegalArgumentException(...),并且正在从我的自定义setHost调用setHostonCreateView中的相机片段。这样,相机视图的上下文不必是相机主机提供程序,您可以在片段中托管视图。

郗俊能
2023-03-14

嗯,我不知道什么是CustomCamFragment。不过,您的代码似乎并没有实际切换到另一个摄像头。您正在通过其构造函数创建CustomCamFragment,而没有告诉它要使用哪个摄像头。您会注意到,演示应用程序的工作方式不是这样的,我使用工厂方法并传入要使用的摄像头(DemoCameraFragment.newInstance(false)对于后向摄像头,DemoCameraFragment。前向摄像头的newInstance(true)

 类似资料:
  •        相机替换开启方法:设置-实验室(可参考10.1)-相机替换        相机替换开启后,可将标绘页面(要素编辑页面)内相机替换为水印相机使用。

  • “相机”组件定义用户从哪个角度查看场景。相机通常与允许输入设备移动和旋转相机的控件组件配对。 例子 位于人眼平均高度(1.6米)的照相机。 <a-entity camera= "userHeight: 1.6" look-controls></a-entity> 属性 属性 描述 默认值 active 在具有多个摄影机的场景中,摄影机是否为活动摄

  • CameraContext jd.createCameraContext() 创建 camera上下文 CameraContext 对象。

  • 相机控制了场景的观察视角。有很多相机操控方法,比如旋转、缩放、平移以及飞行定位。Cesium默认支持使用鼠标和触摸事件控制相机。Cesium也提供了一套可编程的相机控制API。这篇教程就是介绍相机相关知识,以及API。 快速开始 开始示例。打开Sandcastle的 Hello World 示例。默认场景按照下述方式处理鼠标和处理事件: 左键单击和拖拽 – 沿着地球表面平移(调整相机位置). 右键

  • 我正在开发一个React Native软件包,以获取Android设备上摄像头的信息。问题是并不是所有的摄像机都出现了。 我的代码如下: 这段代码返回以下内容: 这表明它缺少REQUEST\u AVAILABLE\u CAPABILITIES\u LOGICAL\u MULTI\u摄像头。然而,我正在测试的手机有3个后摄像头和1个前摄像头。我错过了什么?