Ein etwas anderes Menü


#1

Ich will hier nicht immer nur Fragen stellen, sondern auch mal darstellen, wie ich ein Problem gelöst habe. Diesmal soll es um ein Menü in einer graphischen Anwendung gehen, die ein Displayable gCanvas benutzt.

Um aus einer Graphik Koordinaten abgreifen zu können, und um Punkte in die Graphik einzufügen, brauchte ich einen Zeiger.

Ein Zeiger ist einfach definiert. Ich bevorzuge ein nicht ausgefülltes spitzwinkliges Dreieck. So kann ich durch den Zeiger „hindurchsehen“. Die Spitze ist der Bezugspunkt, entspricht zeiger_X, zeiger_Y. Die Position des Zeigers steuere ich, indem ich mit den Kursortasten zeiger_X, zeiger_Y incremental verändere.
Innerhalb der Anzeigeschleife der Graphik wird showZeiger(g); // Anzeige des Zeigers aufgerufen.

		if (activZeiger == true) {
			g.setColor(0x00e0ff);
			g.drawLine(zeiger_X, zeiger_Y, zeiger_X-6, zeiger_Y-15);
			g.drawLine(zeiger_X, zeiger_Y, zeiger_X+6, zeiger_Y-15);
			g.drawLine(zeiger_X-6, zeiger_Y-15, zeiger_X+6, zeiger_Y-15);
		}
	}```
Beim Aktivieren des Zeigers kann ich gleich seine Position an die gewünschte Stelle setzen, etwa z.B. so auf das nachfolgend beschriebene Menü:
```		// Aktivieren des Zeigers mit *-Taste
		if((keyState & GAME_C_PRESSED) != 0) {
			activZeiger = true;
			zeiger_X = CENTER_X;
			zeiger_Y = getHeight() -18;
			activMenu = true;
		}

Besonders beim kleinen Display eines Handys muss man mit der zur Verfügung stehenden Fläche rationell umgehen. Ich betreibe deshalb gCanvas im Fullscreen-Mode und verzichte weitgehend auf Commands, wie sie bei high-level displayable üblich sind. Wenn ich ohnehin schon für die oben beschriebenen Aufgaben einen Zeiger angelegt habe, kann ich diesen auch gut für die Steuerung des Programms über ein Menü benutzen.
Für meine Anwendung benötigte ich sehr viele verschiedene Eingaben und Kommandos, dazu noch Statusanzeigen. So sind beispielsweise Punktedateien zu laden oder abzuspeichern, Punkte verschiedenen Typs zu setzen oder der Kartenmaßstab einzustellen, zusätzlich die Anzeige des Programmstatus, die augenblicklichen Geo-Koordinaten, der Kartenmaßstab, die Uhrzeit. Um nun das Display nicht mit Schaltflächen zu überladen, habe ich eine relativ kleine Menüfläche weiter unterteilt, ohne sie zu beschriften. Erst wenn der Zeiger diese Schaltflächen erreicht, wird die Funktion angezeigt und lässt sich mit der OK-Taste aktivieren. Die fehlende permanente Beschriftung ist so nicht hinderlich. Wird das Menüfeld vom Zeiger nicht erreicht, wird die Fläche zur Anzeige der Uhrzeit genutzt.
Zur Erläuterung füge ich einige Bildchen hinzu.

Bild 1: Nach dem Start des gCanvas
Der Zeiger steht mittig im Menü. Links im roten Feld wird der Status „W“ (wähle) gezeigt, rechts im grünen Feld der eingestellte Maßstab „1 km“ (Kreisdurchmesser 1 km).

Bild 2: load/del Route
Der Zeiger zeigt auf das Unterfeld load/del Route. Bei OK-FIRE_PRESSED wird Route aktiviert, siehe Statusfeld links. Bei UP_PRESSED wird eine voreingestellte Routedatei geladen ? Bild 3.

Bild 3: Beim Ändern des Kartenmaßstab.

Bild 4: Die Route und einige nützliche PoI’s sind geladen. Der Maßstab ist so eingestellt, dass die ganze Route sichtbar ist. Oben im Bild die Nextmarke – der Anfang der Route. Die Route endet im Ziel bei der grünen Marke. Die geführte Wanderung kann beginnen.

Bild 5: Momentaufnahme bei einer geführten Wanderung am Punkt „I9 Hauptachse“. Hier endet der bisher zurückgelegte Weg (rosa). Der Zeiger steht auf unserem momentanen Standort, die zugehörigen Geo-Koordinaten werden unten angezeigt. Die Nextmarke ist auf der Route schon einen Punkt weiter (oben im Bild, rechtweisender Kurs -93°) .

Bild 6: Der Zeiger ist auf den Punkt „I19 Teehaus“ gestellt. Nach dorthin wären es schätzungsweise 360m Luftlinie auf dem Kurs 118°.

Das angezeigte Datum/Uhrzeit sind nicht ganz ernst zu nehmen, weil ich die Bilder mit dem Emulator anfertigen musste. Ansonsten handelt es sich aber um reale Geo-Daten. Dazu demnächst in der "Spielwiese von mir noch ein paar Fragen.

PS: Leider hat die Forum-Software kein 6. Bild zugelassen.