/* * Copyright 2013 Peng fei Pan * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package me.xiaopan.android.examples.activity.graphics; import java.util.ArrayList; import java.util.List; import me.xiaopan.android.examples.MyBaseActivity; import me.xiaopan.android.examples.R; import me.xiaopan.easy.android.util.camera.CameraManager; import me.xiaopan.easy.android.util.camera.CameraManager.CamreaBeingUsedException; import me.xiaopan.easy.android.util.camera.CameraOptimalSizeCalculator; import android.hardware.Camera; import android.hardware.Camera.Size; import android.os.Bundle; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; /** * 自定义相机 * @author xiaopan * */ public class CameraPreviewActivity extends MyBaseActivity implements CameraManager.CameraCallback{ private SurfaceView surfaceView; private ImageButton flashModeImageButton; private List<String> supportedFlashModes; private CameraManager cameraManager; @Override public void onInitLayout(Bundle savedInstanceState) { hiddenTitleBar(); hiddenStatusBar(); setContentView(R.layout.activity_camera_preview); surfaceView = (SurfaceView) findViewById(R.id.surface_cameraPreview); flashModeImageButton = (ImageButton) findViewById(R.id.imageButton_cameraPreview_flashMode); } @Override public void onInitListener(Bundle savedInstanceState) { //点击显示界面的时候对焦 surfaceView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { cameraManager.autoFocus(); } }); //点击闪光模式按钮,就按照支持的闪光模式依次更新 flashModeImageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //新的闪光模式 String newFlashMode = supportedFlashModes.get((supportedFlashModes.indexOf(flashModeImageButton.getTag()) + 1) % supportedFlashModes.size()); setFlashModeImageButton(newFlashMode); cameraManager.setFlashMode(newFlashMode); } }); } @Override public void onInitData(Bundle savedInstanceState) { cameraManager = new CameraManager(this, surfaceView.getHolder(), this); } @Override public void onResume() { super.onResume(); try { cameraManager.openBackCamera(true); } catch (CamreaBeingUsedException e) { e.printStackTrace(); toastL(R.string.toast_cameraOpenFailed); becauseExceptionFinishActivity(); } } @Override public void onPause() { super.onPause(); cameraManager.release(); } @Override public void onDestroy() { cameraManager = null; super.onDestroy(); } @Override public void onInitCamera(Camera camera) { Camera.Parameters cameraParameters = camera.getParameters(); /* 设置闪光模式 */ supportedFlashModes = new ArrayList<String>(3); supportedFlashModes.add(Camera.Parameters.FLASH_MODE_OFF); supportedFlashModes.add(Camera.Parameters.FLASH_MODE_ON); if(cameraParameters.getSupportedFlashModes().contains(Camera.Parameters.FLASH_MODE_AUTO)){ cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); supportedFlashModes.add(Camera.Parameters.FLASH_MODE_AUTO); setFlashModeImageButton(Camera.Parameters.FLASH_MODE_AUTO); }else{ cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); setFlashModeImageButton(Camera.Parameters.FLASH_MODE_OFF); } /* 设置预览和输出分辨率 */ Size[] optimalSizes = new CameraOptimalSizeCalculator().getPreviewAndPictureSize(surfaceView.getWidth(), surfaceView.getHeight(), cameraParameters.getSupportedPreviewSizes(), cameraParameters.getSupportedPictureSizes()); cameraParameters.setPreviewSize(optimalSizes[0].width, optimalSizes[0].height); cameraParameters.setPictureSize(optimalSizes[1].width, optimalSizes[1].height); camera.setParameters(cameraParameters); } @Override public void onAutoFocus(boolean success, Camera camera) { } @Override public void onStartPreview() { cameraManager.autoFocus(); } @Override public void onStopPreview() { } /** * 设置闪光模式切换按钮 * @param falshMode */ private void setFlashModeImageButton(String falshMode){ if(Camera.Parameters.FLASH_MODE_AUTO.equals(falshMode)){ flashModeImageButton.setImageResource(R.drawable.ic_flash_auto); flashModeImageButton.setTag(Camera.Parameters.FLASH_MODE_AUTO); }else if(Camera.Parameters.FLASH_MODE_OFF.equals(falshMode)){ flashModeImageButton.setImageResource(R.drawable.ic_flash_off); flashModeImageButton.setTag(Camera.Parameters.FLASH_MODE_OFF); }else if(Camera.Parameters.FLASH_MODE_ON.equals(falshMode)){ flashModeImageButton.setImageResource(R.drawable.ic_flash_on); flashModeImageButton.setTag(Camera.Parameters.FLASH_MODE_ON); } } }