Transparente Objekte - Canvas mit Google Mapview

  • Antworten:12
ChriCo
  • Forum-Beiträge: 24

25.03.2011, 10:52:49 via Website

Hallo zusammen,

in meiner Android-App habe ich bestimmte GPS-Koordinaten (lon/lat), die ich mit Strichen (canvas.drawLine) zu einer Route verbinde. Das funktioniert an sich auch sehr gut, leider sieht die Route sehr abgehackt aus, da an den Punkten sich die Verbindungsstücke nicht voll überlappen. Nun war meine Frage, wie ich es machen kann, dass es wie eine schöne durchgezogene Linie aussieht?

Meine erste Idee, war an jedem GPS-Punkt zusätzlich einen Punkt mit Radius (gleich der Strichstärke der Route) einzuzeichnen. Da meine Linien allerdings transparent sind, sieht man durch die Überlagerung der zwei Transparenten Canvas-Objekte die Punkte heraus.

Meine Frage ist nun, wie ich zwei gleiche Transparente Objekte übereinanderlegen kann, man aber keinen Unterschied in der intensität der Farbe erkennen kann.

Vielen Dank für Eure Hilfe!!
ChriCo

Antworten
Harry
  • Forum-Beiträge: 52

25.03.2011, 11:29:41 via Website

Hallo ChriCo,

was hälst du denn davon, wenn du statt canvas.drawLine, canvas.drawPath verwendest?

Gruß Harry

Antworten
ChriCo
  • Forum-Beiträge: 24

25.03.2011, 12:29:16 via Website

Hi, danke für den Tipp. Leider komme ich als Android-Anfänger nicht ganz damit zurecht...
Wie generiere ich mir so einen Path??

Mein momentaner Code sieht ( schleifen rausgeschmissen) wie folgt aus

Point point = new Point();
projection.toPixels(gp1, point); //GPS-Daten des GeoPoints auf Pixel der Karte umrechnen
Point point2 = new Point();
projection.toPixels(geopoint2, point2);
paint.setStrokeWidth(8);
paint.setAlpha(100);
canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);


Wie muss ich es denn abwandeln, um den drawPath benutzen zu können? Danke für die Hilfe!

— geändert am 25.03.2011, 12:31:43

Antworten
Harry
  • Forum-Beiträge: 52

25.03.2011, 13:20:40 via Website

Hey ChriCo,

Ist nicht getestet, sollte aber in etwa so gehen.

1// definition des Pfads
2Path path = new Path();
3// Startpunkt
4path.moveTo(0, -10);
5// weiter Punkte
6path.lineTo(5, 0);
7path.lineTo(-5, 0);
8
9Paint paint = new Paint();
10paint.setStrokeWidth(8);
11paint.setAlpha(100);
12canvas.drawPath(path, paint);


Gruß Harry

Antworten
ChriCo
  • Forum-Beiträge: 24

25.03.2011, 17:04:17 via Website

Hi Harry,

ich habe meinen Code in

1paint.setStrokeWidth(8);
2 paint.setAlpha(100);
3 //canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
4
5 paint.setColor(Color.GREEN);
6 Path path = new Path();
7 path.moveTo(point.x, point.y);
8 path.lineTo(point.x, point.y);
9 path.lineTo(point2.x, point2.y);
10 canvas.drawPath(path, paint);

umgewandelt. Leider wird bei mir nichts (also keine Route) auf der Mapview angezeigt?

— geändert am 25.03.2011, 17:04:39

Antworten
Harry
  • Forum-Beiträge: 52

21.04.2011, 10:08:02 via Website

Hallo ChriCo,

sorry, etwas spät! Aber hatte viel zu tun.
Falls es noch von Bedeutung ist, mir sind ein paar Sachen in deinem Code aufgefallen:

1. Dein Startpunkt und der darauf folgende Punkt sind gleich.
2. mit setAlpha(100) setzt du NUR die Transparenz. Muss im Range 0 - 255 sein. Du verwendest 100. Wenn du GENAU Halbtransparenz haben willst, solltest du 127 verwenden.
3. DER WICHTIGSTE PUNKT: Du setzt keine Farbe für dein Paint-Objekt. Also solltest du zusätzlich noch paint.setColor(Color.Black) für Schwarz verwenden.

Hoffe es hilft dir weiter!

Gruß Harry

Antworten
ChriCo
  • Forum-Beiträge: 24

23.04.2011, 15:08:57 via Website

Hi Harry,

danke für deine Hilfe. Diese Sachen hab ich mittlerweile schon gelöst gehabt, allerdings habe ich immer noch das Problem mit den Verbindungspunkten (siehe oben), d.h. wenn meine Route quasi eine 90Grad-Drehung macht, dann sind zwei rechteckige, abgehackte Linien zu erkennen, anstatt einer "runden" Linie, Ich habe versucht dieses Problem zu lösen, indem ich an jeden Punkt einen eigenen Transparenten Kreise lege, leider addieren sich transparenter kreis und transparente Routenlinie zu einer erkennbar dunkleren Farbe (d.h. zwei Linien mit mittlerer Transparenz = leider dunkler)! Mein Ziel ist allerdings, dass man keinen Unterschied zwischen Linie und Kreis erkennt



Wie kann ich das Problem lösen??

Antworten
Harry
  • Forum-Beiträge: 52

23.04.2011, 19:50:46 via Website

Hallo, schreibe jetzt von meiem Handy im Urlaub, darum halte ich mich kurz.
Meines Wissens sollte das Problem immer noch mit Hilfe von Paths behoben werden können, oder verwendest du Paths?

Das Problem solltest du mit Hilfe des Punktes nicht lösen können. Da du ja transparente Linien willst. Durch einen transparenten Punkt wirst du immer etwas anderes sehen. Und weil du wahrscheinlich halb Transparenz benutzt, nimmt die Transparenz natürlich mit jeder Schicht ab!
Sind dünnere Linien, nicht transparente Lienen oder nur nicht transparente Punkte vielleicht bewusst in einer anderen Farbe keine Option?

Antworten
ChriCo
  • Forum-Beiträge: 24

23.04.2011, 20:13:18 via Website

Meine momentane Lösung finde ich zumindest noch weniger schlecht als dünnere Linien, nicht transparente Lienen oder nur nicht transparente Punkte.

Die Lösung mit den Paths habe ich probiert (siehe) oben? Leider funktioniert es nicht bzw. es wird nichts angezeigt und ich weiß nicht warum?

Lg

Antworten
Harry
  • Forum-Beiträge: 52

24.04.2011, 10:15:36 via Website

[quote=Harry]3. DER WICHTIGSTE PUNKT: Du setzt keine Farbe für dein Paint-Objekt. Also solltest du zusätzlich noch paint.setColor(Color.Black) für Schwarz verwenden.[/qute]

Bringt das auch nichts?

Antworten
ChriCo
  • Forum-Beiträge: 24

24.04.2011, 12:18:35 via Website

Nein bringt leider nix, das habe ich schon gemacht!

Antworten
Harry
  • Forum-Beiträge: 52

24.04.2011, 19:57:47 via Website

Hmm, dann ist da noch irgendetwas anderes falsch!
Ich empfehle aber weiterhin in dieser Richtung nach zu forschen. Die Lücke auf andere Art und Weise zu schließen macht die Sache nur unnötig kompliziert.

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.04.2011, 14:39:33 via App

Hey,
ich hab da auch noch ne Idee. Könntest du nicht voll deckend auf eine Ebene zeichnen und die Ebene dann transparent stellen? Ich weiß nicht, ob das mit Canvas geht, aber einen Versuch wäre es sicher wert..
Lg Ansgar

Antworten