В то время как вы не можете напрямую установить фоновое изображение в SurfaceView
, вы можете перекрывать ImageView
(отображение фонового изображения), и ваш SurfaceView
на вершине этого, делая его прозрачным.
меня были проблемы перформанс при рисовании 1920х1080 растрового изображения в качестве фонового изображения для каждого SurfaceView перекрашивать: единственное решением, которое я нашел (спасибо this answer) было использование ImageView
отображения этого 1920х1080 (фиксированные) растровых изображений, используя мой SurfaceView
сверху из этого, делая его прозрачным, чтобы не рисовать большое фоновое изображение для каждого изображения SurfaceView
. Теперь мое приложение гораздо более гладкое, благодаря этому коде:
// Setup your SurfaceView
SurfaceView surfaceView = ...; // use any SurfaceView you want
surfaceView.setZOrderOnTop(true);
surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);
// Setup your ImageView
ImageView bgImagePanel = new ImageView(context);
bgImagePanel.setBackgroundResource(...); // use any Bitmap or BitmapDrawable you want
// Use a RelativeLayout to overlap both SurfaceView and ImageView
RelativeLayout.LayoutParams fillParentLayout = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
RelativeLayout rootPanel = new RelativeLayout(context);
rootPanel.setLayoutParams(fillParentLayout);
rootPanel.addView(surfaceView, fillParentLayout);
rootPanel.addView(bgImagePanel, fillParentLayout);
Тогда вы должны начать «метод краски ы с этим: (для того, чтобы„очистить“предыдущее нарисованное изображение в SurfaceView
» ваших SurfaceView
буфера s)
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Хорошо, поэтому в методе onDraw() я предполагаю? –
Нет, onDraw() не будет делать то, что вы хотите. Когда вы используете SurfaceView, вы либо визуализируете его, используя контекст OpenGL, либо захватываете холст поверх SurfaceHolder. Вы должны сделать свой фон, используя Canvas (или OpenGL, если вы используете OpenGL.) –
Я использую Canvas - я просто пытаюсь понять, как я буду делать это с Canvas. –