現在,我正在做一個示例應用程序,我必須在surfaceview中使用相機。我已經成功地在Surfaceview中設置了相機,但是我無法在其中獲得正常的相機視圖,寬度和高度也會發生變化。以下是我的代碼,我很高興得到任何人的任何想法。如何在Surfaceview android中獲得正常的攝像頭視圖?
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>
的佈局參數在你** **相機類,有會員**預覽**。它是如何定義和初始化的? – 2014-10-01 08:55:58
上面的代碼是一個,你可以看到它。 – Vicky 2014-10-01 09:30:24
不,我只看到像'preview.addView()'或'preview.removeView()'這樣的語句,但沒有一個像'preview - new Preview(width,height);'。 – 2014-10-01 13:06:49