SurfaceView를 CameraPreview를 위해 사용하는 경우
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); <<와 같이 타입을 정해주잖아요? 이게 없으면 에러가 발생하는데요
이렇게 하면 View에 그림을 그릴 수는 없는건가요?
어떤 게임강좌를 보면서 저렇게 그리면 되겠군 하고 적용해보았는데 에러가 발생하네요..
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): FATAL EXCEPTION: Thread-9
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): android.view.SurfaceHolder$BadSurfaceTypeException: Surface type is SURFACE_TYPE_PUSH_BUFFERS
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at android.view.SurfaceView$3.internalLockCanvas(SurfaceView.java:761)
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at android.view.SurfaceView$3.lockCanvas(SurfaceView.java:752)
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at mg.FirstMission_AR.SurfaceView$viewThread.run(SurfaceView.java:85)
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): *** KLAATU --1
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): android.view.SurfaceHolder$BadSurfaceTypeException: Surface type is SURFACE_TYPE_PUSH_BUFFERS
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at android.view.SurfaceView$3.internalLockCanvas(SurfaceView.java:761)
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at android.view.SurfaceView$3.lockCanvas(SurfaceView.java:752)
06-02 18:15:14.370: ERROR/AndroidRuntime(5312): at mg.FirstMission_AR.SurfaceView$viewThread.run(SurfaceView.java:85)
06-02 18:15:14.581: ERROR/CameraHardwareSec(3667): Smartautoscene thread was already stop
06-02 18:15:14.585: ERROR/SecCamera(3667): Blur is not setting in Back camera.
06-02 18:15:14.589: ERROR/MediaPlayerService(3667): Client::notify In
06-02 18:15:14.589: ERROR/MediaPlayer(3667): message received msg=1, ext1=0, ext2=0
06-02 18:15:14.593: ERROR/MediaPlayerService(3667): Client::notify In
06-02 18:15:14.593: ERROR/MediaPlayer(3667): message received msg=1, ext1=0, ext2=0
06-02 18:15:17.765: ERROR/CameraHardwareSec(3667): Smartautoscene thread was already stop
06-02 18:15:17.765: ERROR/SecCamera(3667): Blur is not setting in Back camera.
06-02 18:15:19.339: ERROR/WindowManager(3675): Overwriting rotation value from 1
06-02 18:15:19.632: ERROR/Launcher(3739): setWindowOpaque()
06-02 18:15:19.925: ERROR/SecCamera(3667): stopPreview: m_flag_camera_start is zero
코드는 다음과 같습니다.
public void run(){
Canvas canvas = null;
while(canRun){
canvas = mHolder.lockCanvas();
try{
synchronized(mHolder){
canvas.drawBitmap(Image, x, y, null);
}
}finally{
if(canvas != null)
mHolder.unlockCanvasAndPost(canvas); //버퍼에 그린것을 뷰에 옮긴다.
}// finally
}// while
}// method run()
어떻게 해야 preview위에 이미지를 그릴 수 있을까요?




SURFACE_TYPE_PUSH_BUFFERS 타입은 안드로이드 서피스뷰에 있는 버퍼를 사용하는게 아니라 외부버퍼를 사용하므로 인해서 원하시는 작업은 불가능합니다. 서피스뷰 위에 그림을 그리거나 하려면 다른 이미지뷰 등을 서피스뷰 위에 올려놓고 배경값을 투명색을 주시고 그림을 그리거나 하면 됩니다.