2013-06-03 9 views
6

Hallo Ich arbeite gerade an einem Spiel, das VIEW der Visualisierung von Audio-Frequenz-Effekt im Hintergrund von SurfaceView enthält.Wie füge ich die Ansicht als Hintergrund zum SurfaceView hinzu?

The surfaceView contains actual game play.

ich einige Code-Schnipsel zu veröffentlichen: -

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 werden wie folgt erstellt -

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.. 
} 

Mein VisualizerView läuft gut so, wie ich das als Hintergrund zu Surface hinzufügen (tatsächlichem Laufe Spiel) .Ich auf dem Problem stecken ist, dass "How to add VIEW as background of surfaceView?" Oder irgendeine andere bessere Lösung für die .. Thx im Voraus ..

+0

Ansichten nicht als Hintergrund hinzugefügt werden. Du musst es als Inhaltsansicht deiner Aktivität einstellen. – Blackbelt

Antwort

7

Eine Möglichkeit, die Sie sich ansehen können, ist, den View's Zeichnungscache Bitmap abzurufen und den Bitmap zu SurfaceView hinzuzufügen, der hinter Ihrem Spielinhalt gezeichnet wird.

Abrufen der Bitmap:

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

Zeichnen Sie die Bitmap in Surface des onDraw(...):

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

Ich bin nicht sicher, dies in Bezug auf Leistung eine gute Idee ist, wenn Sie die Bitmap abzurufen haben jeden Rahmen deines Spiels, aber es könnte einen Besuch wert sein.

+0

Danke Gunnar für die Antwort, aber das ist nicht gut für Echtzeit-Sound-Visualisierung ... Aber ich habe wirklich von deiner Idee beeindruckt. –

+0

Habt ihr das mal gesehen: http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent -? –

+0

Ich habe eine Lösung von diesem Link http://StackOverflow.com/a/15873927/2123594. Aber deine vorgeschlagene Antwort ist auch gut. Vielen Dank.. –

1

versuchen, sie mit Linearlayout hinzuzufügen, und machen sie auf dem jeweils anderen mit:

android:layout_alignLeft="..." 
android:layout_alignTop="..." 
Verwandte Themen