Erste App - GameActivity, SurfaceView
- Home
- Tutorials
- Android
- Spiele App für Android 2.3.6 Programmieren
- Erste App - GameActivity, SurfaceView
BITTE BEACHTEN!
Wenn Eclipse in den weiteren Tutorials den folgenden Zusatz: @SuppressLint("WrongCall") von euch erwartet, dann fügt ihn einfach hinzu. Das sollte einige Fehlermeldungen eliminieren. Getestet mit Eclipse ADT am 20.02.2014!
Was ist eine Activity?
- definiert eine "View", zur Anzeige auf dem Screen
- behandelt "Events" (z. B. Klick auf einen Button)
- benutzt "Intents", um andere Activities zu startenView
- eine "View" ist der sichtbare Teil der Activity
- definiert in einer XML-Layout-Datei (oder im Code)Event
- wird ausgelöst, wenn etwas geschieht (z. B ein Button geklickt wird)
- ruft eine Listener-Methode auf, sofern ein Listener definiert istIntent
- startet eine andere Activity ("öffnet ein neues Fenster")
- kann Daten an die zu startende Activity übergeben
- kann Activities aus anderen Apps starten!
GameActivity Class
package com.panjutorials.lazypudding;
import android.app.Activity;
import android.os.Bundle;
public class GameActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
}
Die Methode onCreate() wird aufgerufen, soblad die Activity gestartet wird. Wir setzen in diesem Fall in Zeile 11 den Inhalt der Seite mit einer neuen Instanz unserer GameView Klasse und übergeben ihr den Context der GameActivity mit this.
In der GameView Klasse legen wir zuersteinmal zwei Objekte global an:
private SurfaceHolder surfaceHolder;
private Bitmap bmp;
Dann erstellen wir einen Konstruktor der einen Context als Parameter braucht. Die Methode :
@SuppressLint("WrongCall")public GameView(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void surfaceCreated(SurfaceHolder holder) {
Canvas theCanvas = surfaceHolder.lockCanvas(null);
onDraw(theCanvas);
surfaceHolder.unlockCanvasAndPost(theCanvas);
}
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
}
Dabei holt unser Objekt surfaceholder (frei übersetzte Oberflächenhalter) mit getHolder() die Oberfläche unseres SurfaceViews(des Bildschirms) (Zeile 3).
In Zeile 4 fügen wir via .addCallback ein Interface hinzu und verwenden darin enthaltenen Methoden um unsere Oberfläche zu beinflussen. Also via surfaceCreated() was passieren soll, wenn die Oberfläche erstellt wird, mit surfaceChanged() was passieren soll, wenn die Oberfläche verändert wird und mit surfaceDestroyed() was passieren soll, wenn die Oberfläche zerstört wird. Und wir möchten nun, dass auf den Canvas(Erklärung weiter unten) via onDraw() gemalt werden soll, wenn die Oberfläche erzeugt wird. Dazu muss jedoch ersteinmal der Canvas nach außen hin locked(gesperrt) werden und nach dem Malen wieder freigegeben und übergeben werden (unlockcanvasandpost).
Im Konstruktor legen wir außerdem für die Bitmap bmp ein Bild fest. das tun wir folgender maßen:
bmp = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
Dabei greifen wir auf die BitmapFactory zu und lassen diese unsere Resource decodieren. Dabei übergeben wir die Ressource und das Bild das wir verwenden möchten. Das Bild das wir verwenden befindet sich im Ordner res(R) --> drawable.
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.DKGRAY);
canvas.drawBitmap(bmp, 25, 66, null);
}
Ist eine Methode mit der wir auf den Canvas malen können. Man kann sich den Canvas als eine Art Tafel vorstellen, auf diese kann man unterschiedlichste Dinge malen. Wir bemalen in diesem Fall in Zeile 3 alles mit einem dunklen Grau und in Zeile 4 malen wir ein Bild also eine Bitmap an die xPosition 25 und die yPosition 66 unseres Canvas.
GameView Class
package com.panjutorials.lazypudding;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView {
private SurfaceHolder surfaceHolder;
private Bitmap bmp;
// @SuppressLint("WrongCall") - neu hinzugefügt am 14.02.14
@SuppressLint("WrongCall")public GameView(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void surfaceCreated(SurfaceHolder holder) {
Canvas theCanvas = surfaceHolder.lockCanvas(null);
onDraw(theCanvas);
surfaceHolder.unlockCanvasAndPost(theCanvas);
}
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
}
});
bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.DKGRAY);
canvas.drawBitmap(bmp, 25, 66, null);
}
}
Kostenlos
Spiele App für Android 2.3.6 Programmieren
-
Android 2.3.6 Spiele App Programmieren
-
Lektion1.1
-
Lektion1.2
-
Lektion1.3
-
Lektion1.4
-
Lektion1.5
-
Lektion1.6
-
Lektion1.7
-
Lektion1.8
-
Lektion1.9
-
Lektion1.10
-
Lektion1.11
-
Lektion1.12
-
Lektion1.13
-
Lektion1.14
-
Lektion1.15
-
Lektion1.16
-
Lektion1.17
-
Lektion1.18
-
Lektion1.19
-
Lektion1.20
-
Lektion1.21
-
Lektion1.22
-
Lektion1.23
-
Lektion1.24
-
Lektion1.25
-
Lektion1.26
-
Lektion1.27
-
Lektion1.28
-
Lektion1.29
-
Lektion1.30
-
Lektion1.31
-
Lektion1.32
-
Lektion1.33
-
Lektion1.34
-
Lektion1.35
-
Lektion1.36
-
Lektion1.37
-
Lektion1.38
-
Lektion1.39
-
Beliebte Kurse
Spring Boot Webentwicklung - RESTful APIs entwickeln!
Lerne Spring Boot und erstelle RESTful APIs Das beliebteste Java...
29,99€
Die Java 11 Masterclass - Werde zum Profi-Entwickler!
Werde zum Entwickler mit der Java 11 Masterclass! Starte in...
29,99€
Spiele entwickeln mit Unity 3D – Erstelle eigene Games in C# - Starter
Willkommen zum kostenlosen Teil des Kurses: "Spiele entwickeln mit Unity...
Kostenlos