Chociaż nie można bezpośrednio ustawić obraz tła do SurfaceView
można pokrywać ImageView
(wyświetlanie obrazu tła) a SurfaceView
na górze to, co przejrzyste.
miałem problemy występy podczas rysowania mapy bitowej 1920x1080 jako tła dla każdego repaint SurfaceView: jedynym rozwiązaniem znalazłem (dzięki this answer) używał ImageView
wyświetlania tego 1920x1080 (stałe) bitmapę, a przy moim SurfaceView
na szczycie z tego, dzięki czemu jest przezroczysty, aby uniknąć malowania dużego obrazu tła dla każdej odmalowania SurfaceView
. Teraz moja aplikacja jest znacznie gładsza, dzięki ten kod:
// 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);
Wtedy zaczynasz „metoda malowania s z tym: (aby«wypłukać»poprzedni narysowanych obrazu w SurfaceView
” Twoje SurfaceView
buforze s)
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Okay, więc w metodzie onDraw() zakładam? –
Nie, onDraw() nie zrobi tego, co chcesz. Kiedy używasz SurfaceView albo renderujesz go w kontekście OpenGL, albo przechwytujesz płótno powierzchni przez SurfaceHolder. Musisz renderować swoje tło za pomocą tego Canvas (lub OpenGL, jeśli robisz OpenGL.) –
Używam tylko Canvas - Po prostu próbuję dowiedzieć się, jak to zrobić z Canvas. –