use of android.hardware.Camera.PictureCallback in project JustAndroid by chinaltz.
the class CaptureActivity method onCreate.
/**
* 开始.
* @param savedInstanceState
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 屏幕参数
int cameraId = this.getIntent().getIntExtra("cameraId", 0);
int orientation = this.getIntent().getIntExtra("orientation", 0);
Config.cameraId = cameraId;
Config.orientation = orientation;
Config.focusMode = 1;
// 强制为横屏
if (Config.orientation == 0) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.camera_main);
// 初始化 CameraManager
CameraManager.init(getApplication());
surfaceView = (SurfaceView) findViewById(R.id.preview_view);
SurfaceHolder surfaceHolder = (SurfaceHolder) surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.setKeepScreenOn(true);
// UI相关
camBtn = (Button) this.findViewById(R.id.shot_btn);
flashBtn = (Button) this.findViewById(R.id.flash_btn);
focusBtn = (Button) this.findViewById(R.id.focus_btn);
okBtn = (Button) this.findViewById(R.id.ok_btn);
cancleBtn = (Button) this.findViewById(R.id.cancle_btn);
camLayout = (FrameLayout) this.findViewById(R.id.cam_layout);
previewLayout = (FrameLayout) this.findViewById(R.id.preview_layout);
camLayout.setVisibility(View.VISIBLE);
previewLayout.setVisibility(View.GONE);
imgResult = (ImageView) this.findViewById(R.id.imgResult);
if (cameraId == 1) {
flashBtn.setVisibility(View.GONE);
}
okBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("path", path);
setResult(RESULT_OK, intent);
finish();
}
});
// 拍照的回调
CameraManager.get().setPictureCallback(new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 关闭预览
CameraManager.get().stopPreview();
Bitmap cameraBitmap = AbImageUtil.getBitmap(data, 1280, 720);
camLayout.setVisibility(View.INVISIBLE);
previewLayout.setVisibility(View.VISIBLE);
imgResult.setImageBitmap(cameraBitmap);
// 插入到相册数据库
try {
String url = insertImage(CaptureActivity.this.getContentResolver(), cameraBitmap, "andbase", "andbase");
path = getRealFilePath(CaptureActivity.this, Uri.parse(url));
Log.e("onPictureTaken", "onPictureTaken insertImage:" + path);
AbToastUtil.showToast(CaptureActivity.this, "insertImage:" + path);
} catch (Exception e) {
e.printStackTrace();
}
}
});
// 对焦的控制
CameraManager.get().setAutoFocusCallback(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
// 对焦成功
} else {
/*//关键代码:自动对焦
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
CameraManager.get().requestAutoFocus();
}
}, 1000);*/
}
if (Config.focusMode == 1) {
CameraManager.get().startPreview();
}
}
});
// 预览
CameraManager.get().setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
// 拍照
camBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CameraManager.get().takePicture();
// 声音
shootSound();
}
});
// 点击屏幕
surfaceView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgResult.setImageBitmap(null);
// 继续预览
CameraManager.get().startPreview();
}
});
// 闪光灯
flashBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CameraManager.get().toogleFlash();
}
});
if (Config.focusMode == 0) {
// 手动对焦
focusBtn.setVisibility(View.VISIBLE);
focusBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CameraManager.get().requestAutoFocus();
}
});
}
cancleBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgResult.setImageBitmap(null);
camLayout.setVisibility(View.VISIBLE);
previewLayout.setVisibility(View.INVISIBLE);
CameraManager.get().startPreview();
}
});
}
Aggregations