Android-Geräte programmieren 1. Einstieg Stefan Rothe 2014 01 27
Rechtliche Hinweise Dieses Werk von Thomas Jampen und Stefan Rothe steht unter einer Creative Commons Attribution-Non- Commercial-ShareAlike-Lizenz. Zudem verzichten die Autoren auf sämtliche Urheberrechtsansprüche für die in diesem Werk enthaltenen Quelltexte.
Quellenangaben 1 Android Robot von Google, Quelle: Wikimedia Commons, Lizenz: Creative Commons Attribution Java Logo von Oracle, Quelle: Wikimedia Commons. Oracle und Java sind registrierte Handelsmarken von Oracle und/oder verbundenen Unternehmen. Jeda Logo von Daniel Cook (LostGarden.com), Quelle: Planet Cute art, Lizenz: Creative Commons Attribution von Lewing, Quelle: Wikimedia Commons, Lizenz: Creative Commons Attribution illustration dessin technique de la pâte à choux (couleur) von F. Cecconi, Quelle: Wikimedia Commons, Lizenz: Creative Commons Attribution-ShareAlike Jeda-Kochbuch von Stefan Rothe basierend auf dem Umschlag des ersten Crisco-Kochbuches von 1912, Quelle des Originals: Wikimedia Commons A library in Edinburgh von Boon Low, Quelle: Flickr, Lizenz: Creative Commons Attribution-NoDerivs William Shakespeare, Quelle: Wikimedia Commons
OXYcom OXY Quellenangaben 2 Dr. Seuss von Greg Williams, Quelle: Wikimedia Commons, Lizenz: Creative Commons Attribution-ShareAlike Oxygen Icons, Quelle: arch linux, Lizenz: GNU Lesser General Public Licence Oxygen Icons, Quelle: arch linux, Lizenz: GNU Lesser General Public Licence Oxygen Icons, Quelle: arch linux, Lizenz: GNU Lesser General Public Licence
Was ist Android? OXYcom OXY Apps Dalvik Linux Hardware
Ausführen einer App App Dalvik Linux OXY OXYcom F820 B800 DEX-Code c7 45 fc 03 Systemaufruf 0100110 Maschinencode Bibliotheken Bibliotheken
Erstellen einer App Java-Quellcode Bytecode App Kompilieren Kompilieren ark Java-Kompiler Dalvik-Kompiler
Android-Gerät vorbereiten 1 USB-Debugging beim Android-Gerät einschalten: Einstellungen Entwickleroptionen Einschalten Haken setzen bei USB-Debugging
Android-Gerät vorbereiten 2 Installation von Programmen zulassen: Einstellungen Sicherheit Haken setzen bei Unbekannte Herkunft
Methode / Method Rezept Titel / Name Folge von Anweisungen Parameter: Anzahl Personen Methode Name: drawcircle Anweisungen:... pâte à choux Parameter: x- und y-koordinate, Radius
Klasse / Class Kochbuch Titel / Name Sammlung von Rezepten zu einem bestimmten Thema Tabellen mit Masseinheiten Klasse Name: Math Methoden: sin, atan,... Konstanten: PI, E
Bibliothek / Library Bibliothek Sammlung von Kochbüchern Organisationsschema Bücher müssen ausgeliehen werden Bibliothek Sammlung von Klassen Name: ch.jeda Verwendung: import ch.jeda.*;
Java Java ist eine Programmiersprache Syntax: Korrekte Schreibweise und Aufbau von Wörtern und Sätzen Semantik: Bedeutung von grundlegenden Konstrukten.
Beliebtheit von Programmiersprachen Sprache Bewertung C 17.871% Java 16.499% Objective-C 11.098% C++ 7.548% C# 5.855% PHP 4.627% (Visual) Basic 2.989% Python 2.400% JavaScript 1.569% Transact-SQL 1.559% Weitere 220 27.985% Quelle: TIOBE Index, Januar 2014
Jeda Programmbibliothek für Java und Android Grafik und Animationen Interaktion und Sensoren Sound- und Musikausgabe Geeignet für Anfänger(innen) Integration in NetBeans IDE
Wieso Jeda? William Shakespeare Dr. Seuss I gin to be aweary of the sun, And wish th estate o the world were now undone. I know it is wet and the sun is not sunny, but we can have lots of good fun that is funny.
NetBeans IDE Entwicklungsumgebung (engl. Integrated Development Environment, IDE) Quelltext-Editor Projektverwaltung Programme kompilieren Programme ausführen Fehlersuche (engl. Debugging)
Programm-Vorlage package ch.jeda.project; import ch.jeda.*; import ch.jeda.ui.*; public class HelloWorld extends Program { Die Klasse befindet sich im Paket ch.jeda.project. Sie kann alle Klassen aus den Paketen ch.jeda und ch.jeda.ui verwenden. Die Klasse heisst HelloWorld. Die Klasse ist ein Jeda-Programm. } @Override public void run() { Befehle, die beim Start ausgeführt werden. // Write your code here. Kommentar für die Programmierenden (wird nicht beachtet). }
Klassen und Pakete Jede Klasse wird in einer eigenen Datei definiert. Die Datei muss gleich heissen wie die Klasse und die Endung.java haben. Die Klasse HelloWorld wird in der Datei HelloWorld.java definiert. Jede Klasse gehört zu einem Paket. Ein Paket entspricht einem Ordner. Die Dateien des Pakets ch.jeda.project müssen sich im Ordner ch/jeda/project befinden. Die Verwendung von Klassen aus anderen Paketen muss mit import explizit deklariert werden.
Fenster Erstellen 1 Mit der folgenden Anweisung wird ein neues Programmfenster erstellt: new Window(); Mit einer new-anweisung wird ein neues Objekt erstellt. Window ist die Klasse des zu erstellenden Objekts. Jede Anweisung wird mit einem Semikolon (;) beendet. Die Klammern () markieren die leere Argumentliste, welche dem neuen Objekt übergeben wird.
Formatierung Leerzeichen und Zeilenumbrüche sind nur relevant, wenn sie zwei Wörter trennen, Java ignoriert alle anderen. Beispielsweise sind folgende zwei Anweisungen identisch: new Window(); new Window( ) ; Leerzeichen und Zeilenumbrüche können verwendet werden, um der Quelltext leserlicher zu gestalten. NetBeans macht dies automatisch mit der Tastenkombination Shift + Alt + F.
Automatische Formatierung in NetBeans Unter Tools / Options / On Save Reformat: All Lines RemoveTrailing Whitespace From: All Lines
Übung 1 a. Starten Sie die NetBeans IDE. b. Erstellen Sie eine Jeda Application for Android. c. Erstellen Sie im Projekt eine Jeda Programm-Klasse. d. Ersetzen Sie im Quelltext den Kommentar // Write your code here. durch die Anweisung, welche ein neues Fenster erstellt. e. Starten Sie das Programm, indem Sie F6 drücken.
Variablen definieren Um auf ein Objekt zugreifen zu können, wird eine Variable benötigt. fenster Für jede Variable muss ein Datentyp deklariert werden. Window fenster; Deklariere Variable wnd des Typs Window. fenster = new Window(); Erstelle ein Objekt und weise es der Variable fenster zu. Variablendeklaration und Zuweisung können zusammengefasst werden: Window fenster = new Window();
Zeichnen Mit einem Methodenaufruf wird einem bestimmten Objekt ein Befehl gesendet. Dies geschieht, indem der betreffenden Variable (getrennt durch einen Punkt) der Methodenname angehängt wird. fenster Dem Befehl kann eine Liste von Argumenten mitgegeben werden. drawcircle(200, 100, 50) fenster.drawcircle(200, 100, 50); Sende dem Fenster-Objekt, auf welches fenster verweist, den Befehl, einen Kreis mit den angegebenen Argumenten zu zeichnen. Die Bedeutung der Argumente ist durch die aufgerufene Methode festgelegt.
Übung 2 Erweitern Sie Ihr Programm aus Übung 1 so, dass es einen Kreis zeichnet. Verändern Sie die Argumente von drawcircle. Was stellen Sie fest? package ch.jeda.project; import ch.jeda.*; import ch.jeda.ui.*; public class HelloWorld extends Program { } @Override public void run() Window fenster = new Window(); fenster.drawcircle(200, 100, 50); }
Koordinatensystem Koordinaten beziehen sich auf die Bildpunkte (Pixel) des Zeichenbereichs. Der Ursprung liegt in der oberen linken Ecke des Zeichenbereichs. Die x-achse zeigt nach rechts, die y-achse zeigt nach unten. Bei einer Fenstergrösse von w h Pixel reichen die Koordinaten von (0, 0) bis (w 1, h 1). (0, 0) (w 1, 0) y x (0, h 1) (w 1, h 1)
Jeda-Zeichenbefehle: Kreis fenster.drawcircle(x, y, r); fenster.fillcircle(x, y, r); Zeichnet einen Kreis mit Mittelpunkt (x, y) und Radius r. Hat keinen Effekt, wenn r 0. x y r Die Variante fillcircle zeichnet einen ausgefüllten Kreis.
Jeda-Zeichenbefehle: Rechteck fenster.drawrectangle(x, y, w, h); fenster.fillrectangle(x, y, w, h); y Zeichnet ein Rechteck, dessen linke obere Ecke in (x, y) liegt, und dessen rechte untere Ecke in (x + w, y + h) liegt. x w h Die Variante fillrectangle zeichnet ein ausgefülltes Rechteck.
Jeda-Zeichenbefehle: Linie fenster.drawline(x1, y1, x2, y2); Zeichnet die Strecke mit Endpunkten (x 1, y 1 ) und (x 2, y 2 ). x 1 y 1 y 2 Die Liniendicke kann vorgängig mit dem Befehl set- LineWidth festgelegt werden: x 2 fenster.setlinewidth(3);
Weitere Jeda-Zeichenbefehle Mit drawpolygon kann ein Polygon gezeichnet werden. Die Eckpunkte des Polygons werden paarweise angegeben: fenster.drawpolygon(x1, y1, x2, y2, x3, y3,...); fenster.fillpolygon(x1, y1, x2, y2, x3, y3, x4, y4,...); Mit fill wird die gesamte Zeichenfläche ausgefüllt: fenster.fill();
Jeda-Zeichenbefehle: Farbe festlegen Mit der Methode setcolor wird die aktuelle Zeichenfarbe festgelegt. fenster.setcolor(color.red); Folgende vordefinierte Farben können verwendet werden: Color.AQUA Color.GRAY Color.NAVY Color.SILVER Color.BLACK Color.GREEN Color.OLIVE Color.TEAL Color.BLUE Color.LIME Color.PURPLE Color.WHITE Color.FUCHSIA Color.MAROON Color.RED Color.YELLOW
Zeichnung der Bildschirmgrösse anpassen Programme, welche auf verschiedenen Geräten eingesetzt werden, müssen sich der jeweiligen Bildschirm- bzw. Fenstergrösse anpassen können. Fenstergrösse ermitteln: int w = fenster.getwidth(); int h = fenster.getheight(); Höhe des Fensters Breite des Fensters Sämtliche Längen und Breiten relativ zur Fenstergrösse rechnen: Zentriertes Rechteck mit 10 Pixel Abstand zum Rand fenster.drawrectangle(10, 10, w - 20, h - 20);