.ACTION_DOWN)
preview.takePicture();
return super.onTouchEvent(event);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
{
preview.takePicture();
}
return super.onKeyDown(keyCode, event);
}
class Preview extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder holder;
private Camera camera;
// 创建一个PictureCallback对象,并实现其中的onPictureTaken方法
private PictureCallback pictureCallback = new PictureCallback()
{
// 该方法用于处理拍摄后的照片数据
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
// data就是照片数据
getIntent().putExtra("bytes", data);
//resultCode 设为20
setResult(20, getIntent());
// 停止照片拍摄
camera.stopPreview();
camera = null;
// 关闭当前的Activity
finish();
}
};
public Preview(Context context)
{
super(context);
holder = this.getHolder();
// 指定用于捕捉拍照事件的SurfaceHolder.Callback对象
holder.addCallback(this);
// 设置SurfaceHolder对象的类型
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
// 开始拍照时调用该方法
public void surfaceCreated(SurfaceHolder holder)
{
camera = Camera.open();
try
{
camera.setPreviewDisplay(holder);
}
catch (IOException exception)
{
// 释放手机摄像头
camera.release();
camera = null;
}
}
// 停止拍照时调用该方法
public void surfaceDestroyed(SurfaceHolder holder)
{
// 释放手机摄像头
camera.stopPreview();
camera.release();
camera = null;
}
// 拍照状态变化时调用该方法
public void surfaceChanged(final SurfaceHolder holder, int format, int w, int h)
{
try
{
Camera.Parameters parameters = camera.getParameters();
// 设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
// 根据屏幕方向设置预浏尺寸
//if (getWindowManager().getDefaultDisplay().getOrientation() == 0)
// parameters.setPreviewSize(h, w);
//else
parameters.setPreviewSize(w, h);
// 设置拍摄照片的实际分辨率,在本例中的分辨率是1024*768
//parameters.setPictureSize(1024, 768);
// 设置保存的图像大小
camera.setParameters(parameters);
// 开始拍照
camera.startPreview();
// 准备用于表示对焦状态的图像(对焦符号)
ivFocus.setImageResource(R.drawable.icon);
LayoutParams layoutParams = new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
ivFocus.setScaleType(ScaleType.CENTER);
addContentView(ivFocus, layoutParams);
ivFocus.setVisibility(VISIBLE);
// 自动对焦
camera.autoFocus(new AutoFocusCallback()
{
public void onAutoFocus(boolean success, Camera camera)
{
if (success)
{
// 对焦成功,改变状态图像
ivFocus.setImageResource(R.drawable.camera);
}
}
});
}
catch (Exception e)
{
}
}
// 停止拍照,并将拍摄的照片传入PictureCallback接口的onPictureTaken方法
public void takePicture()
{
if (camera != null)
{
camera.takePicture(null, null, pictureCallback);
}
}
}
}
以上便是我们对于Android cameraAPI的一些浅显理解,希望能对大家开发Android应用程序的过程有所帮助,并恳请大家提出改进或分享一些相关的Android开发经验
参考文献:
《Android应用开发揭秘》 杨丰盛 机械工业出版社
《Google Android揭秘》 W.Frank Ableson Charlie Collins Robi Sen 人民邮电出版社
联络方式:
申洪健:
肖凯: