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

SurfaceView를 저장할 수 있나요?

0 추천
다음 맵API를 이용해서 안드로이드를 공부하고 있는데

MapView만 따로 메모리에 저장하고 싶습니다.

그런데 getDrawingCache()를 사용하면 검은색화면만 저장이 되요

찾아보니 이런 경우가 SurfaceView일 때 나타나던데

이런 SurfaceView의 리소스를 캡쳐해서 저장하는 방법이 있는지 알고 싶습니다.
and203 (170 포인트) 님이 2013년 3월 15일 질문

2개의 답변

0 추천
 
채택된 답변
SurfaceView는 일반 뷰와는 다르게 더블버퍼링이라는 기법을 사용해서 뷰를 그리기 때문에

뷰의 Drawable이 DrawingCache에 저장되지 않고 프레임버퍼라는 별도의 공간에 저장됩니다.

그래서 getDrawingCache를 하셔도 그냥 빈 비트맵이 리턴됩니다.

 

그런데 이 프레임버퍼는 기본적으로 루트권한이 없으면 접근할 수 없도록 되어 있습니다.

그러므로 일단 API단에서는 해당 뷰를 저장하는건 불가능합니다.

(저장할 방법이 있긴 합니다만, 저도 구현해본 적이 없고, 다음 맵 API를 사용하신다고 하니 불가능한 방법이므로 논외로 하겠습니다.)
퐁풍 (8,740 포인트) 님이 2013년 3월 15일 답변
and203님이 2013년 3월 15일 채택됨
어쩔 수 없죠.. 감사합니다 ㅠ
0 추천

 

setDrawingCacheEnabled(true); << 이거 활성화 하셨나요?
getDtawingCache하실때 퀄리티 등도 설정 하실수 있습니다.
 
jelly (1,630 포인트) 님이 2013년 3월 15일 답변
네 활성화했었어요..ㅠ
 MapView만을 getDrawingCache()했을 경우에는 검은색화면만 저장되구
 MapView를 포함하는 Layout을 getDrawingCach()했을 경우 다른 View는 제대로 보이지만 MapView부분만 검은색화면으로 저장됩니다
MapView가 SurfaceView라서 getDrawingCache()가 안 먹히는거라 예상합니다..ㅠ
myMap.getRootView().setDrawingCacheEnabled(true);            myMap.getRootView().buildDrawingCache();

이렇게 하면 가져 오는걸로 알고 있습니다...
감사합니다 ㅎㅎ 한번 적용해보겠습니다.
getRootView()가 해당 View를 포함하는 Layout을 가져오는 건가요? ㅎㅎ
적용해봤는데 여전히 MapView부분만 여전히 검은색화면으로 저장됩니다...ㅎㅎ
myMap이 MapView구요 거기서 getRootView()를 가져온 뷰에서 setDrawingCacheEnabled 하고 buildDrawingCache를 한후 getDrawingCache를 하시면 될거 같습니다.
감사합니다... 말씀해주신 방법은 SurfaceView에서 힘들 것 같아요..ㅠ
...