안드로이드 개발 질문/답변
(글 수 45,052)
surfaceView를 여러개 사용하고 있습니다.
일반 액티비티에 surfaceView를 하나 사용중이며 설정에 따라서 여러가지 모양과 크기 위치를 변경하여 srufaceView를나타내야되며,
그 설정 변경시 surfaceView 는 ViewStub 안에 각각 surfaceView가 들어가 있습니다.
이경우 기본화면에서 (액티비티내) surfaceView를 통해 잘 나타나다 설정 변경 후
ViewStub를 활성화하며 ViewStub 내의 surfaceView에 화면을 뿌려주도록 하고 있습니다.
이 경우 이전 surfaceView와 중복되어 겹쳐져 보이는 현상이 있으며,
옵션으로 설정했던 ViewStub를 해제하면 기본 액티비티상의 SurfaceView도 정보를 받아오지 못하고 있습니다.
즉, SurfaceView 간 내용을 뿌려줄때 surfaceView 내의 내용을 해제 및 다른 SurfaceView간의 전환이 잘되지 않습니다
이에 대해서 SurfaceView에서 자원 해제 하는 방법 등을 잘 모르겠습니다. -0-;;
이에 관해 아시는분 답변 좀 부탁드립니다.





public class SurfaceViewTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private static class SampleView extends SurfaceView
implements SurfaceHolder.Callback {
public SampleView(Context context) {
super(context);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
public void surfaceCreated(SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
try {
Paint fontPaint = new Paint();
fontPaint.setTextSize(15f);
fontPaint.setColor(Color.WHITE);
canvas.drawText("Wilddog's SurfaceView Test", 10, 40, fontPaint);
} finally {
if (canvas != null)
holder.unlockCanvasAndPost(canvas);
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {}
public void surfaceDestroyed(SurfaceHolder holder) {}
}
}
몇가지 특이한 점만 설명을 드리도록 하겠습니다.
- surfaceDestroyed: Surface가 Destroy된 경우 호출됨. 여기서 필요한 자원 해제 작업을 수행.
5.SurfaceHolder#lockCanvas() & SurfaceHolder#unlockCanvasAndPost(Canvas c)
더블 버퍼링은 스윙이나 OpenGL에서도 사용되는 고전적인 방법으로 애니메이션과 같이 여러 이미지를 번갈아 보여주어야 하는 경우 Back-Buffer에 이미지를 미리 그린 다음 화면에 바로 표시하여 이미지 처리 성능을 향상 시키는 방법입니다.
안드로이드에서도 역시 더블 버퍼링을 제공하고 있습니다. lockCanvas를 통해 얻어진 Canvas에 그림을 그리는 것은 Back-Buffer에 그리는 것으로 화면에 전혀 표시되지 않습니다. 반드시 unlockCanvasAndPost를 수행해주어야 비로소 작성된 이미지는 화면에 표현됩니다. 따라서 애니메이션 처리를 하시려면 애니메이션 관련 루프 내에서 lockCanvas와 unlockCanvasAndPost룰 반복적으로 수행해야 합니다.
[출처]http://link.allblog.net/15580913/http://anddev.tistory.com/14