Si bien no se puede establecer directamente una imagen de fondo a un SurfaceView
, puede superponerse una ImageView
(que muestra la imagen de fondo) y su SurfaceView
en la parte superior de esta, por lo que es transparente.
que tenían problemas de rendimiento en la elaboración de un mapa de bits 1920x1080 una imagen de fondo para cada repinte SurfaceView como: la única solución que encontré (gracias a this answer) fue el uso de un ImageView
mostrar este 1920x1080 mapa de bits (fijo), y el uso de mi SurfaceView
en la parte superior de eso, haciéndolo transparente, para evitar pintar la gran imagen de fondo para cada repintado de SurfaceView
. Ahora mi aplicación es mucho más suave, gracias a este código:
// 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);
A continuación, se iniciará 'método de pintura s con esto: (con el fin de 'limpiar' la imagen dibujada previa en SurfaceView
' sus SurfaceView
búfer s)
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Bien, entonces en el método onDraw() supongo? –
No, onDraw() no hará lo que quiera. Cuando utiliza un SurfaceView, puede procesarlo usando un contexto OpenGL o agarra el lienzo de la superficie a través del SurfaceHolder. Debes renderizar tu fondo usando ese Lienzo (u OpenGL si estás haciendo OpenGL). –
Solo estoy usando un Lienzo - Solo estoy tratando de descubrir cómo haría eso con el Lienzo. –