지금 증강현실 관련 공부중인데 혹시
카메라뷰에서
/
//////////////////////////
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(previewHolder);
} catch (Throwable t) {
Log.e(TAG, "Exception in setPreviewDisplay()", t);
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = getBestPreviewSize(width, height, parameters);
if (size != null) {
/////////////////////////////////////////////////////////
.........................................
여기서 surfaceCallback를
cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
previewHolder = cameraPreview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
이런식으로 불러옵니다
그런데 다른소스에서는 콜백을 아예
/////////////////////////////////////////////////////////////////////
class CameraSurface extends SurfaceView implements SurfaceHolder.Callback {
MixView app; // 메인 뷰
SurfaceHolder holder; // 서페이스 홀더
Camera camera;
// 생성자
CameraSurface(Context context) {
super(context);
try {
app = (MixView) context; // 컨텍스트(메인 뷰)를 등록
// 홀더를 읽어오고 콜백을 등록한다
holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // 푸쉬버퍼 사용
} catch (Exception ex) {
}
}
// 서페이스 생성시
public void surfaceCreated(SurfaceHolder holder) {
try {
.........................
//////////////////////////////////////
이런식으로 정의해서 아예 addContentView로 선언해버리는데
이렇게하지말고 맨위에처럼
inPreview = false;
cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
previewHolder = cameraPreview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
이런식으로 선언해서 한레이아웃안에 담을수없나요?
이유는 이 레이아웃에서 서페이스뷰로 카메라를 열어 그화면에
애니메이션효과를 이용한캐릭터를 띄우기위한 이미지뷰도꼭 써야되서그렇습니다
결국 xml레이아웃에있는 서페이스뷰와 이미지뷰를 이용해서
카메라화면에 이미지를 띄우기위해서입니다.. 캔버스는 안되구요..
어떻게 해야되나요..?ㅠ