2013-06-03 4 views
6

Witam Obecnie pracuję nad Game, która zawiera VIEW z wizualizacją efektu częstotliwości audio w tle surfaceView.Jak dodać widok jako tło do surfaceView?

The surfaceView contains actual game play.

I delegowania niektóre fragmenty kodu: -

main.xml

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_margin="5dp" 
    android:layout_weight="1" 
    android:background="#000" > 

    <co.ardor.visualizer.VisualizerView 
     android:id="@+id/visualizerView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </co.ardor.visualizer.VisualizerView> 
</FrameLayout> 

Visualizer view tworzone są w następujący sposób -

public class VisualizerView extends View 
{ 
    private static final String TAG = "VisualizerView"; 

    private byte[] mBytes; 
    private byte[] mFFTBytes; 
    private Rect mRect = new Rect(); 
    private Visualizer mVisualizer; 
    private Set<Renderer> mRenderers; // type of Renderer class 

    private Paint mFlashPaint = new Paint(); // for flash paint 
    private Paint mFadePaint = new Paint(); // for fade paint 

    public VisualizerView(Context context, AttributeSet attrs, int defStyle) 
    { 
    super(context, attrs); 
    init(); 
} 

    public VisualizerView(Context context, AttributeSet attrs) 
{ 
    this(context, attrs, 0); 
} 

    public VisualizerView(Context context) 
    { 
    this(context, null, 0); 
    } 

    // Some code regarding to the audio visualization.. 
} 

Moja VisualizerView działa dobrze, więc jak mogę dodać to jako tło do SurfaceView (rzeczywista gra działa) .I 'm zakleszczony na problem, który "How to add VIEW as background of surfaceView?" lub dowolny inny lepszym rozwiązaniem dla tego .. Thx z góry ..

+0

Widoki nie mogą być dodawane jako tło. Musisz ustawić go jako widok zawartości swojej działalności – Blackbelt

Odpowiedz

7

Jedną z możliwości, na którą można spojrzeć, jest pobranie View's pamięci podręcznej rysunku Bitmap i dodanie Bitmap do SurfaceView, narysowanej za zawartością Twojej gry.

odzyskać Bitmap:

myVisualizerView.setDrawingCacheEnabled(true); 
mVisualizerBitmap = Bitmap.createBitmap(myVisualizerView.getDrawingCache()); 
myVisualizerView.setDrawingCacheEnabled(false); 

Narysuj Bitmap w SurfaceView za onDraw(...):

canvas.drawBitmap(mVisualizerBitmap, //other params); 

nie jestem pewien, że to świetny pomysł, pod względem wydajności, jeśli trzeba odzyskać bitmapę każdą ramkę gry, ale warto ją poznać.

+0

Dzięki Gunnar za odpowiedź, ale to nie jest dobre dla wizualizacji dźwięku w czasie rzeczywistym ... Ale naprawdę zrobiło na mnie wrażenie twój pomysł. –

+0

Czy spojrzałeś na to: http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent -? –

+0

Mam rozwiązanie z tego linku http://stackoverflow.com/a/15873927/2123594. Ale twoja sugerowana odpowiedź również jest dobra. Dzięki.. –

1

spróbować dodać je za pomocą LinearLayout, i uczynić je w górnej części siebie, używając:

android:layout_alignLeft="..." 
android:layout_alignTop="..."