我正在尝试使用我的自定义gui创建一个切换相机按钮。在我的CustomCam extends 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();
}
我知道该方法因断点和日志语句而触发,但我的屏幕只是黑屏,然后返回相同的标准视图。
注意:我意识到我必须检测手机是否有超过1个摄像头,或者根本没有摄像头。但就目前而言,这个应用程序不是我要发布的东西。只是想让它供我个人使用。
我的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);
}
答案 0 :(得分:0)
好吧,我不知道CustomCamFragment
是什么。但是,您的代码似乎并没有真正切换到另一台摄像头。您正在通过其构造函数创建CustomCamFragment
,而不是告诉它使用哪个相机。您会注意到the demo app的工作原理并非如此,我使用工厂方法并传入要使用的相机(DemoCameraFragment.newInstance(false)
用于后置摄像头,DemoCameraFragment.newInstance(true)
用于前置摄像头相机)。
答案 1 :(得分:0)
要回答关于嵌入片段的最新评论:我已从库中的CameraView构造函数中禁用了throw new IllegalArgumentException(...)
,并且正在我setHost
中的自定义CameraFragment
调用onCreateView
}}。这样,CameraView的上下文不必是CameraHostProvider
,您可以在片段内托管视图。
答案 2 :(得分:0)
我想在不推动新片段的情况下切换前/后相机。在研究了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();
}
}
我希望这可以帮助那些想要保持其片段不变/简单代码的人。