SurfaceView
унаследован от
View
и является элементом управления, предоставляющим область для рисования (
Surface).
Суть в том, чтобы дать отдельному потоку возможность рисовать на
Surface, когда он захочет, а не только тогда, когда приложению
вздумается обновить экран. Понятие Surface очень похоже на Canvas, но
все же немного не то. Canvas — это область рисования на компоненте, а
Surface сам является компонентом, т.е. у Surface есть Canvas.
SurfaceView
является элементом управления, т.е. можно его непосредственно
разместить на форме. Однако, в этом случае толку толку от него будет
мало. Так что мы будем писать свой класс, унаследованный от SurfaceView,
а также класс для потока, который будет на нем рисовать.
SurfaceHolder
Интерфейс, с помощью которого происходит вся непосредственная работа с областью рисования. Выглядит это примерно так:
SurfaceHolder surfaceHolder;
...
Canvas canvas = surfaceHolder.lockCanvas(); surfaceHolder.unlockCanvasAndPost(canvas);
SurfaceHolder.Callback
Интерфейс содержит функции обработки изменения состояния Surface:
- surfaceCreated(SurfaceHolder holder) — первое создание Surface. Здесь можно, например, запускать поток, который будет рисовать на Surface.
- surfaceChanged(SurfaceHolder holder, int format, int width, int height) — любое изменение Surface (например, поворот экрана).
- surfaceDestroyed(SurfaceHolder holder) — уничтожение Surface. Здесь можно останавливать процесс, который рисует на Surface.