2010-08-27 5 views
7

Ich habe eine GLSurfaceView wo ich einige Animationen mit OpenGL zeige.Button und GLSurfaceView

Ich möchte jetzt eine Schaltfläche zu dieser Ansicht hinzufügen. Wie wird das erreicht?

Kann es ohne Einbeziehung des XML-Layouts gemacht werden?

Antwort

18

Sie können Ansichten manuell zur Inhaltsansicht der Aktivität erstellen und hinzufügen. Im onCreate Methode in Ihrer Aktivität nach setContentView auf Ihrem GLSurfaceView oder über ein XML-Layout tun können Sie die folgenden Aktionen aus, die eine Taste auf der Oberseite des GLSurfaceView in der linken oberen Ecke hinzufügen wird:

Button b = new Button(this); 
b.setText("Hello World"); 
this.addContentView(b, 
      new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

Wenn Sie das wollen, Wenn Sie diese Schaltfläche an einer anderen Stelle auf dem Bildschirm platzieren möchten, müssen Sie sie zu einem Layout hinzufügen und dieses Layout dann zur Inhaltsansicht hinzufügen. Um einen Knopf, der in der Mitte des Bildschirms Sie folgendes tun:

LinearLayout ll = new LinearLayout(this); 
Button b = new Button(this); 
b.setText("hello world"); 
ll.addView(b); 
ll.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 
this.addContentView(ll, 
      new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

Wenn Sie die Taste auf der Unterseite des Bildschirms Sie Gravity.BOTTOM statt Gravity.CENTER_VERTICAL verwenden können usw.

Stellen Sie sicher, dass Sie in Ihren Berührungsereignismethoden return super.onTouch aufrufen, wenn Ihre GLSurfaceView Berührungen abfängt oder Ihre Schaltfläche keine Berührungsereignisse empfängt.

+1

Für alle anderen, die darüber stolpern, versuchen Sie 'ViewGroup.LayoutParams', wenn sie benötigt werden; das hilft (zumindest Android Studio) den nötigen Import zu finden. –