android 多媒体和相机详解七
创建一个预览类
为了让用户有效的获取图像和视频,必须能让他们看到相机中的影像。一个相机预览类是一个Su易做图ceView类,它可以显示相机中的实时影像,于是用户就可以框住并捕获图像或视频。
下面例子中的代码演示了如何创建一个基本的相机预览类,此类可以被一个viewlayout包含。此类实现了Su易做图ceHolder.Callback,为的是获取创建和销毁view的回调事件,这个view用来分配相机预览输入。
[java]
/** 一个基本的相机预览类 */
public class CameraPreview extends Su易做图ceView implements Su易做图ceHolder.Callback {
private Su易做图ceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
// 安装一个Su易做图ceHolder.Callback,于是当下层的界面被创建或销毁时我们可以得到通知
mHolder = getHolder();
mHolder.addCallback(this);
// 过时的设置,但是android3.0之前的版本需要。
mHolder.setType(Su易做图ceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void su易做图ceCreated(Su易做图ceHolder holder) {
// 界面被创建了,现在告诉相机何时画 preview.
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
public void su易做图ceDestroyed(Su易做图ceHolder holder) {
// 空的。在你的activity中注意释放相机预览。
}
public void su易做图ceChanged(Su易做图ceHolder holder, int format, int w, int h) {
//如果你的预览可以改变或旋转,小心这里这些事件们。
// 保证在改变大小或改变格式之前停止预览。
if (mHolder.getSu易做图ce() == null){
// 预览界面不存在
return;
}
// 改变之前停止预览
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// 设置预览尺寸并且执行所有大小改变,旋转或格式改变等。
// 开始使用新的设置预览。
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d(TAG, "Error starting camera preview: " + e.getMessage());
}
}
}
/** 一个基本的相机预览类 */
public class CameraPreview extends Su易做图ceView implements Su易做图ceHolder.Callback {
private Su易做图ceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
// 安装一个Su易做图ceHolder.Callback,于是当下层的界面被创建或销毁时我们可以得到通知
mHolder = getHolder();
mHolder.addCallback(this);
// 过时的设置,但是android3.0之前的版本需要。
mHolder.setType(Su易做图ceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void su易做图ceCreated(Su易做图ceHolder holder) {
// 界面被创建了,现在告诉相机何时画 preview.
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
public void su易做图ceDestroyed(Su易做图ceHolder holder) {
// 空的。在你的activity中注意释放相机预览。
}
public void su易做图ceChanged(Su易做图ceHolder holder, int format, int w, int h) {
//如果你的预览可以改变或旋转,小心这里这些事件们。
// 保证在改变大小或改变格式之前停止预览。
if (mHolder.getSu易做图ce() == null){
// 预览界面不存在
return;
}
// 改变之前停止预览
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// 设置预览尺寸并且执行所有大小改变,旋转或格式改变等。
// 开始使用新的设置预览。
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
 
补充:移动开发 , Android ,