Android-Programmierung: Canvas

Willemers Informatik-Ecke

Das einzig seriöse Javabuch :-) Mehr...

.. enthält ein Kapitel zur Android-Programmierung.
Bei Amazon bestellen
2015-11-18
Auf diesen Seiten halte ich meine Erfahrungen im Bereich der Android-Programmierung fest, um sie später nachschlagen zu können. Die Ausführungen sind kein vollständiger Kurs, manchmal nur Notizen, aber vielleicht anderen hilfreich. Der Canvas ermöglicht das Zeichnen auf dem Android-Smartphone. Es wird typischerweise über eine View erreicht, die die Methode onDraw() zur Verfügung stellt.
@Override
public void onDraw(Canvas canvas) {

}
Die Ausmaße des Zeichenbereichs lassen sich über die Methoden getWidth() für die Breite und getHeight() für die Höhe ermitteln.

        float width = canvas.getWidth();
        float height = canvas.getHeight();
Das Koordinatensystem hat ihren Ursprung links oben. Das bedeutet, dass eine höhere y-Koordinate weiter unten liegt.

Zeichenattribute in Paint

Paint wird bei jedem Grafikaufruf übergeben. Meist wird ein Objekt der Klasse verwendet, um die Farbe einzustellen:
private Paint paint = new Paint();
paint.setColor(Color.RED);
Man kann auch mit setTextSize() die Schriftgröße einstellen. Als Parameter wird die Größe übergeben. Es ist allerdings sinnvoll, diese Größe in der Datei values/dimens.xml vorzugeben, weil sie dann leichter an die Auflösung und Größe des Displays angepasst werden kann.
int fontSize = getContext().getResources().getDimensionPixelSize(R.dimen.grossSchrift);
paint.setTextSize(fontSize);
Dazu erhält die Datei values/dimens.xml den folgenden Eintrag:
<resources>
...
    <dimen name="grossSchrift">30sp</dimen>
</resources>

Die Zeichenmethoden des Canvas

drawRect

Der Aufruf zum Zeichnen eines Rechtecks sieht so aus:
canvas.drawRect(new RectF(left, top, right, bottom), paint);
Die Koordinaten werden bei Android in float erwartet.

drawOval

drawOval zeichnet eine Ellipse. Dazu erhält sie als Parameter das Rechteck, das den Außenrahmen der Ellipse darstellt.
RectF pinRect = new RectF(left, top, right, bottom);
canvas.drawOval(pinRect, paint);

drawCircle

Die Methode drawCircle zeichnet einen Kreis und benötigt als Parameter die Koordinaten des Mittelpunkts und den Radius. Natürlich wird auch hier ein Objekt von Paint benötigt.
canvas.drawCircle(x, y, radius, paint);

drawText

String text = ...
canvas.drawText(text, x, y, paint);
x beschreibt den Abstand vom linken Rand. y ist die Position der Basiszeile. Das Bedeutet, dass Unterlängen wie beim kleinen g unterhalb der Position sind.

Homepage (C) Copyright 2015 Arnold Willemer