Растровое изображение - это просто оболочка для коллекции пикселей. Думайте об этом как о массиве пикселей с некоторыми другими удобными функциями.
Canvas - это просто класс, содержащий все методы рисования. Он похож на класс Graphics в AWT / Swing, если вы знакомы с этим. Вся логика о том, как нарисовать круг, или прямоугольник, и т. Д. Содержится внутри Canvas. Холст рисует на растровом изображении или в открытом контейнере GL, но нет никаких причин, по которым в будущем он может быть расширен для рисования на другие типы растров.
SurfaceView - это представление, которое содержит поверхность. Поверхность похожа на растровое изображение (у нее есть хранилище пикселей). Я не знаю, как это реализовано, но я представляю, что это своего рода обертка для растровых изображений с дополнительными методами для вещей, которые непосредственно связаны с отображением на экране (по этой причине поверхность является слишком общей). Вы можете получить Canvas из вашей Surface, который действительно связывает Canvas с базовым растровым изображением.
Ваши вопросы.
1.Canvas имеет свой собственный растровый файл, прикрепленный к нему. К поверхности прикреплен собственный холст.
Да, холст работает с растровым изображением (или открытой панелью GL). Поверхность дает вам Canvas, который работает с тем, что Surface использует для своего пиксельного хранилища в стиле Bitmap.
2.Все окна имеют одну и ту же поверхность и, следовательно, один и тот же холст.
Нет. Вы можете иметь столько поверхностей, сколько захотите.
3.SurfaceView является подклассом View, который, в отличие от других подклассов View и самого View, имеет собственную поверхность для рисования.
Да. Так же, как ListView является подклассом View, который имеет свою собственную структуру данных List. Каждый подкласс View делает что-то свое.