바로 지금, 나는 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>
의 레이아웃 매개 변수를 설정 ** 클래스는있다 회원 ** 미리보기 **. 어떻게 정의되고 초기화됩니까? –
위 코드는 위의 코드에서 볼 수 있습니다. – Vicky
아니요,'preview.addView()'또는'preview.removeView()'와 같은 명령문 만 볼 수 있지만'preview - new Preview (width, height);'와 같은 명령문은 볼 수 없습니다. –