Canvas.drawLines, die nicht zusammenhängende Segmente anzeigen [duplizieren]

8

Ich bin neu in der Android- und Java-Programmierung und habe ein bisschen mit der Entwicklung von mobilen Apps herumgespielt. Ich habe vor kurzem eine Ansicht erstellt, bei der die Linien im Einklang mit den Fingerbewegungen des Benutzers gehalten werden. Ich habe jedoch Probleme mit der Canvas.drawLines-Methode.

Anstatt eine kontinuierliche Reihe von Linien zwischen allen Punkten zu bekommen, bekomme ich mehr von einem gestrichelten Muster mit Unterbrechungen zwischen den Segmenten:

Hier ist ein Beispielsatz von Daten und einfachem Code, um das Problem zu reproduzieren (Punktdaten wurden von einem echten Finger Swipe übernommen):

%Vor%

Nachdem ich jeden Punkt gezeichnet und ihn über der Linie überlagert habe, erkannte ich, dass das Problem tatsächlich darin besteht, dass jeder Punkt nicht verbunden ist, nur alle zwei Punkte. Anstatt Punkt 1 mit Punkt 2 zu Punkt 3 und so weiter zu verbinden, verbindet die Methode 1 zu 2 und dann 3 zu 4, wie unten gezeigt:

Ich kann fast bekommen, was ich will, indem ich wieder% ce_de% zeichne und diesmal einen Offset erzeuge, so dass die anderen Paare auch zusammen gezeichnet werden, aber das scheint ineffizient und im Allgemeinen klobig zu sein und die Linie ist immer noch nicht ganz glatt (wird an den Ecken leicht abgehackt).

Also, meine Frage ist; Was mache ich falsch und wie kann ich eine einfache, glatte Linie mit einigen Punkten zeichnen? Verdammt, vergiss die Punkte, wenn es einen besseren Weg gibt, den Finger des Benutzers mit einer Linie zu verfolgen, bin ich ganz Ohr. Vielen Dank im Voraus.

    
Ed S. 29.05.2011, 10:40
quelle

2 Antworten

12

Was Sie erhalten, ist genau das, was in der drawLines Dokumentation angegeben ist.

Eine Möglichkeit, das zu tun, was Sie wollen, wäre ein Path daraus zu erstellen Daten und verwenden Sie drawPath anstatt drawLines . Etwas wie:

%Vor%

Zeichnen Sie es dann mit:

%Vor%

Von Path docs:

  

Die Path-Klasse kapselt zusammengesetzte (mehrere Kontur-) geometrische Pfade ein, die aus geraden Liniensegmenten , quadratischen Kurven und kubischen Kurven bestehen. Es kann mit canvas.drawPath (Pfad, Farbe), entweder gefüllt oder gestri- chen (basierend auf dem Malstil )

gezeichnet werden

Sie müssen also möglicherweise den Stil Ihrer Farbe ändern, um den richtigen Effekt zu erzielen.

    
Mat 29.05.2011, 10:51
quelle
3

Ich bin heute Abend in diese Ausgabe reingerannt. Für alle anderen, die damit konfrontiert sind, besteht das Problem darin, dass Android nicht von Punkt 1 zu Punkt 2, dann Punkt 2 zu Punkt 3, Punkt 3 zu Punkt 4 usw. zeichnet. Es werden Punkte 1 bis 2 und dann Punkte 3 bis 4 angezeigt usw. Sie können also auch den vorherigen Punkt zweimal in die von Ihnen verwendete Datenstruktur schieben (ich habe Vector verwendet). Also:

%Vor%

Stellen Sie dann sicher, dass Sie Ihre mPoints in einen float [] konvertieren und an canvas.drawLines() übergeben.

    
MCLLC 26.01.2013 03:16
quelle

Tags und Links