Zeichenflächen unter Android [] (Zeichenflächen unter Android), Notizen, Seite 723558
https://www.purl.org/stefan_ram/pub/canvas_android (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Android-Entwicklung

Zeichenflächen unter Android

Gefahren für Menschen

⚠ Warnung Die Programme auf dieser Seite können Bildschirmflimmern hervorrufen, das bei einigen Personen, die dafür empfänglich sind, Störungen, wie beispielsweise epileptischen Anfälle, hervorrufen kann. Starten Sie diese Programme nicht, wenn sich solche Personen in der Nähe befinden könnten!

de.wikipedia.org/wiki/Lichtflimmern
„Lichtflimmerfrequenzen wirken sich, bewußt oder unbewußt wahrgenommen, negativ auf Augen, Gehirn, Hirnströme, Hormone, Nervosität, neurologische Abläufe, Verarbeitungs- und Steuerungszentren, Koordination, Stoffwechsel, Glukoseverbrauch, kapillaren Blutfluß oder Schlafqualität aus und können Migräne, Kopfschmerz oder epilepsieartige Anfälle auslösen.[6] Bei 1 von 4000 Menschen bestehen Risiken durch Epilepsie-Anfälle im Frequenzbereich von 3 Hz bis 70 Hz, Gesundheitsrisiken ab 165 Hz auch in Bezug auf sichtbares und unsichtbares Flimmern.[7] Die Zeitschrift ÖKO-TEST skizziert das Lichtflimmern in der Ausgabe November 2011 als „Disco fürs Hirn“.[8] Der Baubiologe Joachim Gertenbach konstatiert eine Beeinträchtigung des Nervensystems in Auswirkung als Kopfschmerzen, Migräne oder Unwohlsein und sieht die Wohngesundheit durch LED-Flimmern eingeschränkt.[9] Noch kritischer in Bezug auf eine Flimmer-Grenzfrequenz ist die Wirkungsweise bei Bewegung der Lichtquelle und dem Beobachter zueinander.“
6.↑ a b Baubiologe Wolfgang Maes: Hinters Licht geführt: Energiesparlampen, Ergänzter Sonderdruck aus WOHNUNG+GESUNDHEIT, Heft 133, 2009
7.↑ IEEE Standards Association (IEEE-SA): A Review of the Literature on Light Flicker, (PDF; 682 kB)
8.↑ http://www.oekotest.de/cgi/index.cgi?artnr=98893&bernr=01&seite=03
9.↑ Verband Baubiologie: Wohngesundheit durch LED-Flimmern eingeschränkt

Gefahren für Geräte

⚠ Warnung Die Programme auf dieser Seite verstecken teilweise die Anzeigeelemente zum Beenden des Programms. Bei Tests mit dem Emulator konnte das System erst nach dem Ausschalten und Wiedereinschalten mit dem Ausschalter wieder bedient werden. Auf realen Geräten sollten die Programme nur gestartet werden, wenn das Risiko in Kauf genommen wird, daß das Gerät dann nie mehr bedient werden kann. Eventuell ist es etwas weniger riskant, in dem folgenden Programm das »_STICKY« zu entfernen. Das Entfernen des gesamten Aufrufs von »setSystemUiVisibility« sollte das eben beschriebene Risiko vollkommen beseitigen.

Eine flimmernde Farbfläche mit »invalidate«

Das folgende Programm zeigt, wie der Bildschirm eines Gerätes mit einer Farbe gefüllt werden kann. Es füllt den Bildschirm mit einer bestimmten Farbe und kurz danach wieder mit einer anderen Farbe. Dadurch entsteht ein farbiges Flimmern.

Die Klasse »com.example.Rectangle« definiert eine Sichtfläche (»android.view.View«), die in ihrer onDraw-Methode durch Verwendung von »drawRGB« mit einer zufälligen Farbe gefüllt wird. In der onDraw-Methode wird anschließend durch »super.invalidate()« erreicht, daß diese Methode bald erneut aufgerufen wird. Dies liegt daran, daß »super.invalidate()« festlegt, daß die Sichtfläche neu gezeichnet werden muß, und die onDraw-Methode einer Sichtfläche für die Zeichnung der Sichtfläche zuständig ist.

Bei den Farbkomponenten „Rot“, „Grün“ und „Blau“ bedeutet der Wert »0« minimale Intensität und der Wert »255« maximale Intensität (im Aufruf von »drawRGB«).

In der Methode »onCreate« wird durch den Aufruf von »setSystemUiVisibility« verlangt, daß das Hauptfenster der Aktivität den gesamten Bildschirm ausfüllt. In einem Programm, das von deren Personen als dem Programmierer benutzt wird, sollte dies mit Vorsicht verwendet werden, da es viele Anwender stören könnte. Außerdem besteht das Risiko, daß es dann nicht einfach oder unmöglich ist, die Anwendung wieder zu verlassen. Deswegen sollte dieser Aufruf vor dem Start der Anwendung auf einem realen Gerät entfernt werden. Schließlich wird dann ein Exemplar der zuvor deklarierten Klasse »Rectangle« angelegt und als „Inhalt“ dieser Aktivität festgelegt (wodurch es zur Anzeige gebracht wird).

Main.java

package com.example;

/** Eine rechteckiges Sichtkomponente. */
class Rectangle extends android.view.View
{

/** Ein Zufallszahlengenerator. */
private final java.util.Random generator = new java.util.Random();

/** Initialisiert ein rechteckiges Sichtobjekt.
@param context Der Kontext für dieses View */

public Rectangle( final android.content.Context context )
{ super( context ); }

/** Legt fest, was diese Komponente beim Empfang der Nachricht {@code onDraw} tut.
@param canvas Eine Zeichenfläche, in die gezeichnet werden kann, um das
Aussehen dieser Komponente festzulegen. */

protected void onDraw( final android.graphics.Canvas canvas )
{ { /* Die gesamte Zeichenfläche wird auf eine zufällige Farbe gesetzt,
indem zufaellige Werte aus dem Bereich von 0 bis 255 für jede
der drei Farbkomponenten (Rot, Grün und Blau) festgelegt werden. */

canvas.drawRGB
( generator.nextInt( 256 ), generator.nextInt( 256 ), generator.nextInt( 256 )); }
{ /* Durch den Aufruf von "invalidate()" wird erreicht, daß diese
Methode ("onDraw(android.graphics.Canvas") bald wieder aufgerufen
wird. */

super.invalidate(); }}}

public class Main extends android.app.Activity
{

/** Diese Methode erstellt den Objektgraphen der Aktivität.
@param bundel ein Bündel, dessen Bedeutung durch Android festgelegt ist */

@java.lang.Override public void onCreate( final android.os.Bundle bundle )
{ super.onCreate( bundle );

{ /* Es soll kein Titel angezeigt werden. */
Main.this.requestWindowFeature( android.view.Window.FEATURE_NO_TITLE ); }

{ /* Einstellen des Hauptfensters dieser Anwendung auf Vollbilddarstellung.
Ein Erklärung der einzelnen Namen findet sich auf:
http://developer.android.com/training/system-ui/immersive.html
http://developer.android.com/reference/android/view/View.html */

Main.this.getWindow().getDecorView().setSystemUiVisibility
( 0
| android.view.View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| android.view.View.SYSTEM_UI_FLAG_FULLSCREEN /* hides status bar */
| android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY ); }

{ /* Hier wird unser Spezialobjekt als Inhalt dieser Aktivität festgelegt,
wodurch es sichtbar gemacht wird. */

setContentView( new Rectangle( this ) ); }}}

Übungsaufgaben

Die folgenden Übungsaufgaben wurden näherungsweise mit ungefähr steigendem Schwierigkeitsgrad angeordnet.

/   Gelbes Warnblinken

Das Programm soll eine gelbes Warnblinklicht realisieren, wie es etwa bei einer Notsituation in einem Kraftfahrzeug nützlich sein kann. Das ganze soll vom weiten möglichst so aussehen, wie eine reale gelbe Warnblickleuchte. Die Schwarz- und die Gelbphase sollen beide zwischen 400 und 800 Millisekunden dauern.

Zusatzaufgaben

/   Taschenlampe

Das Programm soll ständig eine möglichst große und möglichst helle weiße Fläche anzeigen.

/   Partyleuchte

Das Programm soll ständig eine mögiichst große und rote oder gelbe Fläche mit hoher Farbsättigung und hoher Intensität zeigen.

/   Glühlampe

Programmieren Sie Ihr Android-Gerät so, daß es eine große weiße Fläche für Beleuchtungszwecke anzeigt, deren Farbtemperator so ist wie die Farbtemperatur einer typischen klassischen Glühlampe. (Zusatzaufgabe: Erlauben Sie die Wahl zwischen: typischem Glühlampenlicht, typischem Neonlicht, typischem Tageslicht [mit und ohne Bewölkung] und LED-Licht.)

/   Stroboskop

Programmieren Sie ein Stroboskop, das meist eine schwarze Fläche zeigt, die aber manchmal kurz weiß aufblitzt.

/   Variable Partyleuchte

Ändern Sie das Beispielprogramm folgendermaßen ab:

Zusatzanforderungen für Fortgeschrittene:

/   Weitere Zeichenmethoden

In einem android.graphics.Canvas-Objekt finden sich neben »drawRGB« noch weitere Zeichenmethoden. Probieren Sie jede dieser Zeichenmethoden aus, deren Dokumentation für Sie verständlich ist.

/   Blaues Warnblinken

Das Programm soll eine blaues (oder rotes) Warnblinklicht realisieren, wie es etwa von Einsatzfahrzeugen von Polizei oder Feuerwehr verwendet wird. Hierbei soll das Licht nicht nur ein und ausgeschaltet werden, sondern im Helligkeitsverlauf so variieren, wie bei einem realen Warnblicklicht eines Einsatzfahrzeuges. Im besten Fall soll das ganze im dunklen aus einiger Entfernen auf einem hinreichend großen Bildschirm genau so aussehen wie ein Warnblicklicht eines Einsatzfahrzeuges.

/   Fernsehsimulator

Das Fenster eines Raumes soll nachts von außen so aussehen, als ob in dem Raum ein Fernseher laufen würde, um Einbrecher abzuschrecken. Steuern Sie den Bildschirm eines Androidgerätes so an, daß man es in einen dunklen Raum legen kann, um diesen Effekt zu erreichen.

/   Farbuhr

Programmieren Sie eine farbige Fläche, die um Mitternacht ein tiefes Schwarz und zwölf Studen später ein helles Weiß anzeigt. Dazwischen soll die Bildschirmfarbe langsam in verschiedenen Farben changierend wechseln (nie sprunghaft, sondern immer nur langsam), so daß zu jeder Uhrzeit (von 0 bis 24 Uhr) eine andere Farbe gehört und man dann an der Farbe die ungefähre Tageszeit erkennen kann.

/   Notsignal

Es soll nur mit schwarz und weiß ein SOS-Signal angezeigt werden, so daß das Gerät nachts auf einer einsamen Insel verwendet werden kann, um visuelle SOS-Signale an vorbeifliegende Flugzeuge zu geben.

/   Weitere Animationen

Verwenden Sie die android.graphics.Canvas-Zeichenmethoden, um Animationen zu erstellen, wie beispielsweise einen sich bewegenden Kreis, der von den Rändern des Bildschirms reflektiert wird.

/   Verschiedene Arten von Uhren

Kombinieren Sie das in früheren Lektionen entwickelte Zählerprogrammen mit einer Animationstechnik (entweder dem in dieser Lektion vorgestellten »super.invalidate()« oder dem bereits früher vorgestellten »postDelayed«), um verschiedene Arten über Tastflächen bedienbarer Uhren zu programmieren, wie etwa:

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723558 stefan_ram:723558 Zeichenflächen unter Android Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723558, slrprddef723558, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/canvas_android