现在,我在做一个示例应用程序在那里我有surfaceview使用相机。 我已经成功地设置surfaceview相机,但我在那里不能得到正常的摄像机视图,宽度和高度得到改变。 下面是我的代码,我很高兴得到任何人的任何想法。
Camera类:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
cameraObject = isCameraAvailiable();
showCamera = new ShowCamera(this, cameraObject);
preview.addView(showCamera);
takePhotoButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cameraObject.takePicture(null, null, capturedIt);
cameraObject.stopPreview();
preview.removeView(showCamera);
cameraObject.release();
cameraObject = Camera.open();
showCamera = new ShowCamera(Photo.this, cameraObject);
preview.addView(showCamera);
}
});
}
SurfaceHolder类:
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holdMe;
private Camera theCamera;
public ShowCamera(Context context, Camera camera) {
super(context);
theCamera = camera;
holdMe = getHolder();
holdMe.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
theCamera.stopPreview();
theCamera.setDisplayOrientation(90);
camWidth = width;
camHeight = height;
theCamera.startPreview();
initPreview(width, height);
}
private void initPreview(int width, int height) {
// Log.i(TAG, "initPreview()starts");
if (theCamera != null) {
try {
Camera.Parameters param;
param = camera.getParameters();
param.setPreviewSize(176, 144);
camera.setParameters(param);
theCamera.setPreviewDisplay(holdMe);
} catch (Throwable t) {
Log.e("PreviewDemo-surfaceCallback",
"Exception in setPreviewDisplay()", t);
}
}
// Log.i(TAG, "initPreview() ends");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
theCamera.setDisplayOrientation(90);
theCamera.setPreviewDisplay(holdme);
theCamera.startPreview();
} catch (IOException e) {
}
}
public void surfaceDestroyed(SurfaceHolder arg0) {
this.getHolder().removeCallback(this);
theCamera.stopPreview();
theCamera.release();
}
}
Framelayout.xml
<FrameLayout
android:id="@+id/preview1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentLeft="true">
</FrameLayout>