Anzeige von Text (wie Score), der sich bei jedem Bild ändert

7

Gibt es eine einfache Möglichkeit, einfachen weißen Text ohne Texturen in der rechten oberen Ecke anzuzeigen, die sich bei jedem Bild in der Klasse ändert, die Renderer in der Methode onDrawFrame implementiert? Es ist 2D, also muss ich keine Transformationen machen, glaube ich. Ich habe viele Tutorials gefunden, aber alle scheinen zu komplex mit zu viel Code zu sein. Vielleicht könnte es nur mit ein paar Zeilen Code gemacht werden? Wenn das nicht möglich ist, was ist der einfachste Weg, dies zu tun, ohne zu viel Code zu verändern? Bitte zeigen Sie den vollständigen Code, da ich ein Neuling bin.

    
good_evening 12.03.2013, 19:48
quelle

8 Antworten

11

Renderer ist eine OpenGL-Methode. OpenGL ES unterstützt von Natur aus keinen Text. Dies lässt die folgenden Optionen übrig:

  1. Verwenden Sie eine Textur, und zeichnen Sie sie mithilfe der Canvas-Klasse von Android.
  2. Verwenden Sie eine Bibliothek. Dies wird wahrscheinlich auch zu einer Textur führen.
  3. Erstellen Sie den Text mit Polygonen.

Da Ihre Frage nach einer Lösung fragt, die nicht zu einer Textur führt, sind 1 und 2 beide out. Und da du etwas Einfaches willst, ist auch 3 out. Lasst keine guten Lösungen.

Eine Alternative, die in Betracht gezogen werden sollte, ist das Überlagern einer anderen Ansicht oberhalb der GLSurfaceView, die Sie verwenden. Sie können ein RelativeLayout verwenden, um zwei Ansichten einfach zu stapeln. Eine davon ist eine Textansicht, die Sie an der oberen rechten Ecke des Bildschirms verankern können. Pseudocode unten:

%Vor%

Dieser Ansatz hat den Vorteil, dass Sie die OpenGL-Anforderungen für Ihren Text umgehen müssen. Ich habe dies erfolgreich mit ein paar meiner Apps gemacht.

    
Grimmace 13.03.2013 04:43
quelle
7

Sie können sich das API Demos-Projekt ansehen, das mit den Android SDK-Beispielen geliefert wird. Es gibt ein OpenGL Sprite Text-Beispiel, das genau das tut, was Sie wollen.

Sie können die Demo sehen, indem Sie API-Demos auf dem Emulator (oder Gerät) installieren und navigieren zu: API-Demos & gt; Grafiken & gt; OpenGL ES & gt; Sprite Text

Hier ist ein Screenshot:

Der Text in der unteren rechten Ecke des Bildschirms wird für jedes Bild in der onDrawFrame-Methode des Renderers geändert.

Sie finden den Quellcode in Ihrem Android SDK-Beispielverzeichnis: ApiDemos \ src \ com \ Beispiel \ android \ apis \ graphics \ spritetext

Sie müssen einige Dateien in Ihr Projekt kopieren und mit wenigen Zeilen Code die gleiche Funktionalität erreichen.

Beispielanwendung : Ich habe eine Beispielanwendung erstellt, um dasselbe zu demonstrieren, indem ich Code aus dem API-Demos-Projekt wiederverwende. Sie können es von hier bekommen - OpenGLText_eclipse_project.zip

Kurz gesagt, Sie können Grid.java, LabelMaker.java, NumericSprite.java vollständig wiederverwenden. Fügen Sie dann einige Zeilen Code in Ihren Renderer ein, um die oben genannten Klassen zu verwenden, wie in meinem TextRenderer.java

gezeigt

So sieht es aus, wenn der Score kontinuierlich aktualisiert wird.

Grundsätzlich ist das Rendern der Punkte so einfach:

%Vor%     
appsroxcom 29.03.2013 07:30
quelle
3

Sehen Sie sich den Bitmap-Font-Generator von CodeHead und den Android Loader an und versuchen Sie, diesen Code zu verwenden.

CBFG

Android Loader

    
R KiranKumar 30.03.2013 07:20
quelle
2

Ich habe eine Bitmap-Zeichenfläche drawText verwendet, aber ich musste sie trotzdem als Textur verwenden, wahrscheinlich mit einer kleineren Bitmap und Schriftgröße

%Vor%

Wenn Sie hier in Kapitel 9 src / com.badlogic.androidgames.framework.gl gehen .Font.java ist was ich für Bitmap-Fonts verwende und ich erzeuge die Bitmapfonts mit Codeheads Bitmap Font Generator

    
JRowan 12.03.2013 19:56
quelle
2

Der Text sollte sich in einer anderen Ebene als die OpenGL-Datei befinden.

%Vor%

Mit FrameLayout können Ansichten übereinander gestapelt werden. Setzen Sie den Text dann mit:

%Vor%

Sie müssen möglicherweise das Neuzeichnen des Bewertungslayouts nach jedem Rendering von GLSurfaceView erzwingen, um zu vermeiden, dass OpenGL über den Text gezeichnet wird. (bin mir nicht sicher)

Um die Leistung zu verbessern, machen Sie den Textbereich so klein wie möglich (wrap_content für Breite und Höhe des LinearLayout)

    
Sdra 19.03.2013 10:26
quelle
1

Meiner Meinung nach können Sie ein RelativeLayout verwenden, um die GLSurfaceView einzubinden, und auch eine weitere TextView, die Sie einfügen können, wo immer Sie möchten. Übergeben Sie dann in Ihrem Renderer-Konstruktor die TextView-Referenz     GLES20TriangleRenderer (Kontext Kontext, TextView TV) Rufen Sie in der onDrawFrame-Methode

auf %Vor%     
Acheese 27.03.2013 02:54
quelle
1

Sie müssen Ihren Punktzahltext in eine Bitmap zeichnen und diese Bitmap nach der Verwendung als Textur verwenden.

Um einen Text auf der Bitmap zu zeichnen, können Sie diesen Code verwenden:

%Vor%     
Derzu 28.03.2013 18:05
quelle
0

Sie könnten einfach eine TextView an Ihre Activity WindowManager anhängen und von dort aus anzeigen. Wie folgt.

%Vor%

Aktualisieren Sie dies dann über

%Vor%

    
Jug6ernaut 31.03.2013 14:21
quelle

Tags und Links