Android: Wie mache ich ein klickbares Kartenbild mit jedem Land, das eine andere Aktion erzeugt?

Ich muss ein hübsches Bild von einer Karte von Europa anzeigen, und ich möchte, dass meine App, z. B. eine andere Aktivität auftaucht, wenn der Benutzer jedes Land klickt – jedes Land auf der Karte muss ein anderes onClickListener (oder gleichwertig) haben.

Im Wesentlichen muss ich in der Lage sein, eine andere Funktion aufzurufen, wenn der Benutzer auf Frankreich anstatt Spanien in einem Bild wie dieses tippt: http://commons.wikimedia.org/wiki/File:Blank_map_of_Europe_cropped.svg

  • OnMapReady nicht anrufen, obwohl die Kartenanzeige ohne Fehler auftritt
  • Android Service muss immer laufen (niemals pausieren oder stoppen)
  • Android-Suchmaschine
  • Auf Android, wie schaltet man Aktivitäten programmgesteuert ein?
  • Authentifizierung mit Facebook auf den ersten und dann Google verursacht einen Fehler in Firebase für Android
  • RecyclerEndelementaktualisierung + asynchroner Netzwerkaufruf
  • Wie würde ich das am besten auf Android machen?

    Ich habe Ideen, aber es kann ein einfacher Weg sein, dass ich mit Blick aufsähe.

    Vielen Dank im Voraus!

    Cheers, r3mo

  • Android-Lader, der Weg zu gehen?
  • MAT (Eclipse Memory Analyzer) - wie man Bitmaps aus dem Speicher-Dump anzeigt
  • Übergeben von JSONObject in eine andere Aktivität
  • Lineares Layout und Gewicht in Android
  • Android Wear Benachrichtigung wird nicht angezeigt, wenn FLAG_NO_CLEAR verwendet wird
  • Positionieren eines Bildes in einem ImageView mit maximaler Höhe und maximaler Breite
  • 4 Solutions collect form web for “Android: Wie mache ich ein klickbares Kartenbild mit jedem Land, das eine andere Aktion erzeugt?”

    Hier ist, wie ich ein ähnliches Problem gelöst habe.

    Zuerst duplizieren Sie das Bild, das Sie als Bildkarte verwenden möchten, und färben Sie jeden Abschnitt. Unnötig zu sagen, eine andere Farbe für jeden Abschnitt: D. Dann erstellen Sie zwei ImageViews in Ihrem Layout. Setzen Sie den Hintergrund des ersten als das Bild, das Sie angezeigt werden möchten, um Bildschirm und den Hintergrund der zweiten als die farbigen in einem.

    Setzen Sie dann die Sichtbarkeit der zweiten ImageView auf unsichtbar. Wenn Sie das Programm an dieser Stelle ausführen, sollten Sie das Bild sehen, das Sie anzeigen möchten. Dann benutze einen OnTouch-Listener und bekomme die Farbe des Pixels, wo du berührt hast. Die Farbe entspricht der des farbigen Bildes.

    Die folgende getColour-Methode müsste die x- und y-Koordinaten des Touch-Ereignisses übergeben werden. R.id.img2 ist das unsichtbare Bild.

    private int getColour( int x, int y) { ImageView img = (ImageView) findViewById(R.id.img2); img.setDrawingCacheEnabled(true); Bitmap hotspots=Bitmap.createBitmap(img.getDrawingCache()); img.setDrawingCacheEnabled(false); return hotspots.getPixel(x, y); } 

    Hoffe, das war von etwas Hilfe für dich :).

    Ich habe es mit einer Maske wie Scotty angedeutet, aber ich lief in mehr Probleme. Grundsätzlich waren die von getPixel zurückgegebenen Farben etwas anders als in der Maskenakte. Was ich tat, war, die Maske in Erinnerung mit Skalierung deaktiviert und mit voller Farbe Optionen wie folgt zu laden:

     BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmapOptions.inTargetDensity = 1; bitmapOptions.inDensity = 1; bitmapOptions.inDither = false; bitmapOptions.inScaled = false; bitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; mask = BitmapFactory.decodeResource(appContext.getResources(), resMask, bitmapOptions); 

    Dann sah ich die Schnüre aus dem skalierten Bild wie folgt auf:

     ImageView map = (ImageView) findViewById(R.id.image); Drawable drawable = map.getDrawable(); Rect imageBounds = drawable.getBounds(); int scaledHeight = imageBounds.height(); int scaledWidth = imageBounds.width(); int scaledImageOffsetX = Math.round(event.getX()) - imageBounds.left; int scaledImageOffsetY = Math.round(event.getY()) - imageBounds.top; int origX = (scaledImageOffsetX * mask.getWidth() / scaledWidth); int origY = (scaledImageOffsetY * mask.getHeight() / scaledHeight); if(origX < 0) origX = 0; if(origY < 0) origY = 0; if(origX > mask.getWidth()) origX = mask.getWidth(); if(origY > mask.getHeight()) origY = mask.getHeight(); 

    Und dann habe ich mask.getPixel (origX, origY) angewendet. Es funktioniert nur, wenn das Bild mit Android skaliert ist: scaleType = "fitXY" innerhalb der ImageView, ansonsten sind die Coords ausgeschaltet.

    Ich habe es nicht ausprobiert, aber das sieht sehr vielversprechend aus.

    Ich bin dabei, es in meinem Projekt zu versuchen, ich hoffe es funktioniert für euch.

    Dieser Kerl versucht im Grunde, HTML-Tag-Map in Droiden zu emulieren mit Prise Zoom und Drag.

    Ich folgte der Antwort von clausundercover, hatte aber trotzdem Probleme mit der Konsistenz der Pixelfarbe über eine Region. Was schließlich für mich gearbeitet hat, ist sicherzustellen, dass ich ein PNG-Bild mit indizierter Farbe für die Maske verwende. In meinem Fall habe ich die weboptimierte Palette (216 Farben) verwendet und sorgte dafür, dass alle Farben, die ich ausgewählt habe, Werte aus dieser Palette waren. Sobald ich diese Änderung gemacht habe, bekam ich den gleichen Farbwert über die gesamte Region.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.