**
* 自定义的拍照
*
*
*/
public class CameraActivity extends Activity implements View.OnClickListener, TakePictureListener{
private String mSaveRoot;
private CameraContainer mContainer;
private ImageButton mCameraShutterButton;
private ImageButton mRecordShutterButton;
private ImageView mFlashView;
private ImageButton mSwitchModeButton;
private ImageView mSwitchCameraView;
private ImageView mSettingView;
private ImageView mVideoIconView;
private View mHeaderBar;
private SimpleDraweeView iv_image;
private String photoPath;
private RelativeLayout rl_root;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
Fresco.initialize(this);
setContentView(R.layout.camera);
} catch (Exception e) {
e.printStackTrace();
// Log.d("CameraActivity");e.getMessage();
}
//上面的
mHeaderBar = findViewById(R.id.camera_header_bar);
//Camera的容器 继承自RelativeLayout
mContainer = (CameraContainer) findViewById(R.id.container1);
mVideoIconView = (ImageView) findViewById(R.id.videoicon);
iv_image = (SimpleDraweeView) findViewById(R.id.iv_image);
//相机
mCameraShutterButton = (ImageButton) findViewById(R.id.btn_shutter_camera);
mRecordShutterButton = (ImageButton) findViewById(R.id.btn_shutter_record);
mSwitchCameraView = (ImageView) findViewById(R.id.btn_switch_camera);
//闪光灯
mFlashView = (ImageView) findViewById(R.id.btn_flash_mode);
mSwitchModeButton = (ImageButton) findViewById(R.id.btn_switch_mode);
mSettingView = (ImageView) findViewById(R.id.btn_other_setting);
mCameraShutterButton.setOnClickListener(this);
mRecordShutterButton.setOnClickListener(this);
mFlashView.setOnClickListener(this);
mSwitchModeButton.setOnClickListener(this);
mSwitchCameraView.setOnClickListener(this);
mSettingView.setOnClickListener(this);
mVideoIconView.setOnClickListener(this);
mSaveRoot = "";
mContainer.setRootPath(mSaveRoot);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
//拍照
case R.id.btn_shutter_camera:
//set TakePictureListener callBack
mCameraShutterButton.setClickable(false);
mContainer.takePicture(this);
break;
case R.id.videoicon:
//处理删除的 结果 //
photoPath = null;
mCameraShutterButton.setVisibility(View.VISIBLE);
iv_image.setVisibility(View.GONE);
mSwitchModeButton.setVisibility(View.INVISIBLE);
mVideoIconView.setVisibility(View.INVISIBLE);
mContainer.setVisibility(View.VISIBLE);
mHeaderBar.setVisibility(View.VISIBLE);
break;
case R.id.btn_flash_mode:
//set light
if (mContainer.getFlashMode() == FlashMode.ON) {
mContainer.setFlashMode(FlashMode.OFF);
mFlashView.setImageResource(R.drawable.btn_flash_off);
} else if (mContainer.getFlashMode() == FlashMode.OFF) {
mContainer.setFlashMode(FlashMode.AUTO);
mFlashView.setImageResource(R.drawable.btn_flash_auto);
} else if (mContainer.getFlashMode() == FlashMode.AUTO) {
mContainer.setFlashMode(FlashMode.TORCH);
mFlashView.setImageResource(R.drawable.btn_flash_torch);
} else if (mContainer.getFlashMode() == FlashMode.TORCH) {
mContainer.setFlashMode(FlashMode.ON);
mFlashView.setImageResource(R.drawable.btn_flash_on);
}
break;
case R.id.btn_switch_mode:
//处理对 号的结果
Intent intent = new Intent();
intent.putExtra("photopath", photoPath);
setResult(RESULT_OK, intent);
mCameraShutterButton.setVisibility(View.GONE);
mSwitchModeButton.setVisibility(View.GONE);
mVideoIconView.setVisibility(View.GONE);
mContainer.setVisibility(View.GONE);
finish();
break;
case R.id.btn_switch_camera:
//change to camera
mContainer.switchCamera();
break;
default:
break;
}
}
//拍照后的回调
@Override
public void onTakePictureEnd(Bitmap thumBitmap) {
mCameraShutterButton.setClickable(true);
}
@Override
public void onAnimtionEnd(Bitmap bm, boolean isVideo) {
}
@Override
public void onTakePictureEnd(String photoPath) {
this.photoPath = photoPath;
mContainer.setVisibility(View.GONE);
mHeaderBar.setVisibility(View.GONE);
iv_image.setVisibility(View.VISIBLE);
mCameraShutterButton.setVisibility(View.GONE);
mSwitchModeButton.setVisibility(View.VISIBLE);
mVideoIconView.setVisibility(View.VISIBLE);
iv_image.setImageURI(Uri.parse("file:///" + photoPath));
}
}
原因:CameraContainer类里的摄像头在autoFocus之前没有开启预览
try {
mCameraView.getmCamera().startPreview(); // 拍照闪退,加上这句话就可以了
mCameraView.onFocus(point, autoFocusCallback);
mFocusImageView.startFocus(point);
}catch (Exception e){
e.printStackTrace();