마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SurfaceView 질문입니다! 제발도와주세요ㅠㅠ

0 추천

서피스뷰에 카메라를 보이고, 이 위에 canvas로 텍스트를 그리고있씁니다

처음 한 방법은 레이아웃 xml에 surface를 두어 그것을 카메라 프리뷰로 사용하고

서피스뷰를 하나 더 만들어 여기 위에 canvas를 그리려 했습니다

 

이 방법을 하니까 서피스 뷰 2개가 겹치게 되는데 텍스트는 보이나 카메라가 보이질 않습니다 ㅠㅠ

 

그래서 생각한 방법은 서피스뷰를 하나로 두어 하는 방법입니다

아예 xml 서피스뷰를 없애고 레이아웃에 코드상에서 서피스뷰를 addContent 로 서피스뷰를 추가하였는데

이 방법 역시 카메라가 보이질않습니다ㅠㅠ

 

어떻게 해결해야하나요......하루종일 이것때문에 아무것도못하고잇습니다ㅠㅠ

아래 코드는 두번째 방법으로 짰던 코드입니다!!

public class OverlaySurfaceView extends SurfaceView implements Callback {
	private Camera camera;
	private SurfaceHolder mHolder;
	private OverlayThread oThread;
	private int mWidth;
	private int mHeight;
	
	public OverlaySurfaceView(Context context) {
		super(context);
		SurfaceHolder overlayHolder = getHolder();
		overlayHolder.addCallback(this);
		mHolder = overlayHolder;
		mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		
		oThread = new OverlayThread(overlayHolder, context);
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		mWidth = width;
		mHeight = height;
		
		Camera.Parameters parameters = camera.getParameters();
		parameters.setPreviewSize(width, height);
		
		camera.setParameters(parameters);
		camera.startPreview();
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		oThread.start();
		camera = Camera.open();
		camera.setDisplayOrientation(90);
		try {
			camera.setPreviewDisplay(holder);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		oThread.interrupt();
		oThread.stop();
		
		camera.stopPreview();
		camera.release();
		camera = null;
	}
	
	class OverlayThread extends Thread {
		Canvas canvas;
		SurfaceHolder mHolder;
		Paint paint;
		
		public OverlayThread(SurfaceHolder holder, Context context) {
			mHolder = holder;
			paint = new Paint();
			paint.setColor(Color.WHITE);
			paint.setTextSize(30);
			
		}
		
		public void run() {
			while (true) {
				canvas = mHolder.lockCanvas();
				canvas.drawColor(Color.TRANSPARENT);
				try {
					synchronized (mHolder) {
						canvas.drawText("TEXT", 200, 200, paint);
					}
				} finally {
					if (canvas != null) {
						mHolder.unlockCanvasAndPost(canvas);
					}
				}
			}
		}
}

 

 

 

익명사용자 님이 2014년 3월 16일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...