Mentre non è possibile impostare direttamente un'immagine di sfondo a una SurfaceView
, è possibile sovrapporre un ImageView
(che visualizza l'immagine di sfondo) e il vostro SurfaceView
in cima a questa, rendendolo trasparente.
ho avuto problemi di prestazioni quando si disegna una bitmap 1920x1080 come immagine di sfondo per ogni riverniciare SurfaceView: l'unica soluzione che ho trovato (grazie a this answer) stava usando un ImageView
la visualizzazione di questa 1920x1080 bitmap (fisso), e usando il mio SurfaceView
in cima di esso, rendendolo trasparente, per evitare di dipingere la grande immagine di sfondo per ogni riverniciatura SurfaceView
. Ora la mia app è molto più agevole, grazie a questo codice:
// 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);
Poi si deve avviare 'metodo paint s con questo: (al fine di 'svuotare' l'immagine disegnata precedente SurfaceView
' tuoi SurfaceView
tampone s)
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Ok, quindi nel metodo onDraw() presumerei? –
No, onDraw() non farà quello che vuoi. Quando si utilizza un SurfaceView si esegue il rendering in esso utilizzando un contesto OpenGL o si acquisisce la superficie della superficie attraverso SurfaceHolder. Devi rendere il tuo sfondo usando quel Canvas (o OpenGL se stai facendo OpenGL.) –
Sto solo usando un Canvas - Sto solo cercando di capire come lo farei con il Canvas. –