切换/前置摄像头飞 [英] switch back/front camera on fly
本文介绍了切换/前置摄像头飞的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我只用CAMERA_FACING_BACK或CAMERA_FACING_FRONT一切工作正常。 我有从CAMERA_FACING_BACK开关CAMERA_FACING_FRONT麻烦。 我的code段
公共类PhotoCameraActivity扩展活动实现OnClickListener {
私人SurfaceView cameraView;
私人按钮turnButton;
私人相机拍照= NULL;
私人回调监听;
私有静态诠释CAMID = Camera.CameraInfo.CAMERA_FACING_BACK;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.photo_camera_main);
prepareActivity();
}
私人无效prepareActivity(){
cameraView =(SurfaceView)findViewById(R.id.photo_camera_surface_view);
turnButton =(的ImageButton)findViewById(R.id.turn_button);
turnButton.setOnClickListener(本);
}
@覆盖
公共无效的onClick(视图v){
如果(v.equals(turnButton)){
{ - 如果(1 Camera.getNumberOfCameras()Camera.getNumberOfCameras()→1&安培;&安培; CAMID&公升)
startCamera(CAMID + 1);
} 其他 {
startCamera(Camera.CameraInfo.CAMERA_FACING_BACK);
}
}
}
@覆盖
保护无效onResume(){
startCamera(CAMID);
super.onResume();
}
@覆盖
保护无效的onPause(){
stopCamera();
super.onPause();
}
私人无效startCamera(INT cameraId){
如果(相机!= NULL){
stopCamera();
}
支架= cameraView.getHolder();
监听=新的回调(){
@覆盖
公共无效surfaceDestroyed(SurfaceHolder持有者){
}
@覆盖
公共无效surfaceCreated(SurfaceHolder持有者){
尝试 {
camera.set previewDisplay(保持器);
camera.start preVIEW();
}赶上(IOException异常E){
e.printStackTrace();
}
}
@覆盖
公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT){}
};
holder.addCallback(听众);
CAMID = cameraId;
摄像头= Camera.open(cameraId);
Camera.Parameters PARAMS = camera.getParameters();
如果(cameraId == Camera.CameraInfo.CAMERA_FACING_BACK){
params.set previewSize(1280,800);
} 其他 {
params.set previewSize(640,480);
}
camera.setParameters(PARAMS);
}
私人无效stopCamera(){
的System.out.println(stopCamera法);
如果(相机!= NULL){
camera.stop preVIEW();
camera.set previewCallback(空);
camera.release();
摄像头= NULL;
holder.removeCallback(听众);
支架=无效;
}
}
}
解决方案
我重新启动与cameraId = 2的活动,这是工作。
If I use only CAMERA_FACING_BACK or CAMERA_FACING_FRONT all works fine. I have trouble with switch from CAMERA_FACING_BACK to CAMERA_FACING_FRONT. My code snippet
public class PhotoCameraActivity extends Activity implements OnClickListener {
private SurfaceView cameraView;
private Button turnButton;
private Camera camera = null;
private Callback listener;
private static int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photo_camera_main);
prepareActivity();
}
private void prepareActivity() {
cameraView = (SurfaceView) findViewById(R.id.photo_camera_surface_view);
turnButton = (ImageButton) findViewById(R.id.turn_button);
turnButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.equals(turnButton)) {
if (Camera.getNumberOfCameras() > 1 && camId < Camera.getNumberOfCameras() - 1) {
startCamera(camId + 1);
} else {
startCamera(Camera.CameraInfo.CAMERA_FACING_BACK);
}
}
}
@Override
protected void onResume() {
startCamera(camId);
super.onResume();
}
@Override
protected void onPause() {
stopCamera();
super.onPause();
}
private void startCamera(int cameraId) {
if (camera != null) {
stopCamera();
}
holder = cameraView.getHolder();
listener = new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
};
holder.addCallback(listener);
camId = cameraId;
camera = Camera.open(cameraId);
Camera.Parameters params = camera.getParameters();
if (cameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
params.setPreviewSize(1280, 800);
} else {
params.setPreviewSize(640, 480);
}
camera.setParameters(params);
}
private void stopCamera(){
System.out.println("stopCamera method");
if (camera != null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
holder.removeCallback(listener);
holder = null;
}
}
}
解决方案
I restart Activity with cameraId = 2 and this is working.
这篇关于切换/前置摄像头飞的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文