SurfaceView는 일반 뷰와는 다르게 더블버퍼링이라는 기법을 사용해서 뷰를 그리기 때문에
뷰의 Drawable이 DrawingCache에 저장되지 않고 프레임버퍼라는 별도의 공간에 저장됩니다.
그래서 getDrawingCache를 하셔도 그냥 빈 비트맵이 리턴됩니다.
그런데 이 프레임버퍼는 기본적으로 루트권한이 없으면 접근할 수 없도록 되어 있습니다.
그러므로 일단 API단에서는 해당 뷰를 저장하는건 불가능합니다.
(저장할 방법이 있긴 합니다만, 저도 구현해본 적이 없고, 다음 맵 API를 사용하신다고 하니 불가능한 방법이므로 논외로 하겠습니다.)