"ImageMap" + Skalieren

  • Antworten:5
Gelöschter Account
  • Forum-Beiträge: 3

03.02.2012, 18:34:16 via Website

Hallo Forum,

ich komme aus der Webprogrammierung und möchte mich aufgrund eines konkreten Projekts mit der Android-Programmierung beschäftigen. Kenntnisse in Java sind vorhanden.

Problemstellung:
Ich habe 300 Bilder. Beim Klick auf bestimmte Bereiche soll ein entsprechend anderes Bild geladen werden. Die Bilder sollen zoombar (Multitouch) sein. Außerdem soll per Dropdown-Feld und Suche-Feld direkt auf die 300 Bilder zugegriffen werden können. Es gibt einen Vor- und Zurück-Button.

Überlegung:
Von HTML sind mir die Image-Maps bekannt. Wie kann ich sowas in Android umsetzen? Mein erster Ansatz wäre, mir zunächst ImageMaps für jedes Bild anzulegen und anschließend die Koordinaten und Zielbilder zu exportieren und in eine XML-Datei packen. Dann müsste man "unsichtbare" Polygone (die ImageMaps) auf dem Bild zeichnen, damit ich die Methode contains für das ontouch-Event nutzen kann.

Frage:
1. Gibt es einen eleganteren Weg, Polygone für mein ontouch-Event zu bestimmen, anstatt über ImageMaps zu gehen?
2. Wie verhalten sich die Polygone beim Zoom? Der Klickbare Bildbereich soll ja analog gleich bleiben. Wie gehe ich da vor?
3. Wo sind Fehler in meinen Überlegungen bzw. was muss ich beachten?

Ich suche keine Komplettlösungen. Aber ein paar Stichwörter, damit ich in die richtige Richtung komme, wäre schön.

Danke.

Oliver

Antworten
Felix
  • Forum-Beiträge: 259

03.02.2012, 22:40:30 via Website

Tach!

ich komme aus der Webprogrammierung und möchte mich aufgrund eines konkreten Projekts mit der Android-Programmierung beschäftigen. Kenntnisse in Java sind vorhanden.

Kenntnisse in Java sind schon nicht schlecht, aber Android bringt doch eine Menge eigene Philosophie ins Spiel, die es zu erarbeiten gilt. Aber wenn du schon HTML und Co kennst, kannst du auch mit einer WebView arbeiten. Damit hast du vergleichsweise wenig Android-Gegebenheiten zu berücksichtigen und kannst die bekannten HTML-Elemente wie map und area verwenden.

1. Gibt es einen eleganteren Weg, Polygone für mein ontouch-Event zu bestimmen, anstatt über ImageMaps zu gehen?

Ich kenne kein OnAreaTouch oder ähnliches und denke, du müsstest dich dann mit geometrischen Problemen beschäftigen. Insbesondere wäre dann die Aufgabenstellung, von einem gegebenen Touch-Punkt zu ermitteln, ob er innerhalb des Polygons liegt oder nicht. Aber auch dazu musst du das Rad nicht neu erfinden, für dieses Problem lassen sich garantiert Lösungswege finden.

2. Wie verhalten sich die Polygone beim Zoom? Der Klickbare Bildbereich soll ja analog gleich bleiben. Wie gehe ich da vor?

Das kommt darauf an, wie sich deine Koordinaten verhalten. Üblicherweise hat man zwei Betrachtungsweisen. Das Welt-Koordinatensystem beschreibt deine Leinwand und alle Objekte darauf. Dies geschieht unabhängig vom Ausgabemedium, welches zum Beispiel nur einen Teil der Welt darstellen kann und diesen gezoomt, gedreht und sonstwie angepasst darstellen kann. Dazu werden die Welt-Koordinaten in die entsprechenden Screen-Koordinaten umgerechnet. Im Welt-System bleiben also deine Polygone immer gleich groß. Beim Touch auf den Screen musst du "nur" die Screen-Koordinaten unter Berücksichtigung von Zoom etc. auf die Welt-Koordinaten umrechnen. Auch dieses Prinzip ist ausreichend im Web beschrieben.


Felix.

Antworten
Gelöschter Account
  • Forum-Beiträge: 3

04.02.2012, 08:35:54 via Website

Kenntnisse in Java sind schon nicht schlecht, aber Android bringt doch eine Menge eigene Philosophie ins Spiel, die es zu erarbeiten gilt. Aber wenn du schon HTML und Co kennst, kannst du auch mit einer WebView arbeiten. Damit hast du vergleichsweise wenig Android-Gegebenheiten zu berücksichtigen und kannst die bekannten HTML-Elemente wie map und area verwenden.

Ich will (muss) das schon mit Android umsetzen.

Ich kenne kein OnAreaTouch oder ähnliches

Daher hatte ich mir das ja mit Polygonen überlegt. Dort gibt es eine bestehende Methode contains, die überprüft, ob ein Pixel im Polygon liegt. Die ImageView hat doch ein touch-Event, oder? Da bekomme ich doch Pixel-Werte, vermute ich.

Das Welt-Koordinatensystem

Das werde ich mal recherchieren.

Beim Touch auf den Screen musst du "nur" die Screen-Koordinaten unter Berücksichtigung von Zoom etc. auf die Welt-Koordinaten umrechnen. Auch dieses Prinzip ist ausreichend im Web beschrieben.

Na dann gehe ich mal auf die Suche. Wobei mir das am schwierigsten erscheint. Aber wenn es da was gibt, werde ich es wohl finden.

Danke soweit.

Antworten
Felix
  • Forum-Beiträge: 259

04.02.2012, 14:59:04 via Website

Tach!

Ich kenne kein OnAreaTouch oder ähnliches

Daher hatte ich mir das ja mit Polygonen überlegt. Dort gibt es eine bestehende Methode contains, die überprüft, ob ein Pixel im Polygon liegt. Die ImageView hat doch ein touch-Event, oder? Da bekomme ich doch Pixel-Werte, vermute ich.

ImageView stammt von View ab und View hat ein touch-Event, welches auch die Koordinaten liefert. Aber ImageView selbst ist nur ein Rechteck. Ein Polygon oder ein Element mit solch einem Verhalten ist mir nicht bekannt und in der Android-Dokumentation fand ich nichts dergleichen. Mit den 2D-Grafik-Möglichkeiten kann man zwar auf dem Canvas zeichen, auch Shapes, aber diese sind, soweit ich das sehe, einmal gezeichnet nur noch Pixel-Information. In dem Fall müsstest du deine Polygone auch noch selbst verwalten.


Felix.

Antworten
Gelöschter Account
  • Forum-Beiträge: 3

05.02.2012, 10:28:46 via Website

Ok. Dann weiß ich jetzt ja, wie es nicht geht.
Hat jemand noch eine Idee, wie es geht?

Antworten
Felix
  • Forum-Beiträge: 259

05.02.2012, 11:38:00 via Website

Tach!

Mit den eingebauten Mitteln scheint es wirklich nicht direkt zu gehen, aber meine beiden Lösungsideen habe ich ja schon genannt: WebView oder Selbermalen auf einem Canvas.


Felix.

Antworten