2010-08-25 10 views
14

Wie erstellen Sie einen animierten gestrichelten oder gepunkteten Rahmen einer beliebigen Form in Android? In XML (bevorzugt) oder programmgesteuert.Animierte gestrichelte Umrandung in Android

Siehe Bild unten für ein Beispiel.

alt text

+0

Ist es in einem mobilen Gerät wünschenswert? Es ist nicht nur so attraktiv wie das BLINK-Tag, es wird auch Batteriestrom verbrauchen. Wenn es sich um Anzeigen handelt, ist dies nicht der richtige Weg, um zufriedene Kunden zu gewinnen. –

+0

Es ist wünschenswert für meinen Anwendungsfall. Es ist für eine Grafik-App, und die gestrichelte Animation Grenze ist ein universelles Symbol für eine Maske. Außerdem glaube ich nicht, dass dies mehr Batterieleistung als ein Live-Hintergrund essen wird. – hpique

+0

OK, ich vermutete schändliche Werbezwecke. Das ist ein vernünftiger Zweck. –

Antwort

18

Haben Sie die PathEffects API Demo gesehen? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html

Es produziert genau eine animierte Linie und Sie können einfach den Pfad an den Rand Ihrer Ansicht anpassen, um einen Rahmen zu erstellen. Zum Beispiel:

Definieren Sie einen Pfad durch Ihre Ansicht Parameter/beliebige Form:

Path path = new Path(); 
path.addRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), Path.Direction.CW); 

Dann eine gestrichelte PathEffect erstellen mit:

PathEffect pe = new DashPathEffect(new float[] {10, 5, 5, 5}, phase); 

legen Sie dann die Mitarbeiter mit einem Lack Objekt und ziehen :

mPaint.setPathEffect(pe); 
canvas.drawPath(path, mPaint); 

EDIT: Der animierte Effekt kommt aus dem ständigen Ändern der Phase und neu zeichnen. In der API-Demo ruft es invalidate() in der onDraw() -Methode auf (was onDraw() auslöst)

+0

Danke antonyt!Genau das habe ich gesucht. Schade, es kann nicht in XML definiert werden. – hpique

+1

Ein Problem damit ist, dass es eine Menge von Objekten zuweist, die Garbage Collection auslösen und dazu führen können, dass Ihre Animation stottert. Sie können einen Teil des Problems vermeiden, indem Sie float [] als Klassenmitglied irgendwo zuweisen. Nicht sicher, wie Sie die DashPathEffect-Zuweisung jedes Mal vermeiden können, wenn sich die Phase ändert, obwohl Sie natürlich selbst mit der Animation umgehen können, indem Sie die Zeilen übersetzen. – mwd

+0

Sie können ein Array von DashPathEffects erstellen (mit einer Größe, die der höchsten Zahl im Float-Array entspricht, in diesem Fall 10) und diese Effekte erneut verwenden. Zumindest mache ich das, aber für den "PathDashPathEffect" -Effekt. –

0

XML ... ich denke, nicht möglich. Sie können jedoch eine benutzerdefinierte Ansicht oder eine SurfaceView verwenden und die Zeichnung selbst verwalten. Viel Spaß damit :)

+0

Gibt es irgendwelche Hinweise, um es mit einer benutzerdefinierten Ansicht oder SurfaceView zu implementieren? – hpique

+0

Sie können Linien auf jeder Leinwand zeichnen und das verwendete Paint-Objekt kann verschiedene Stile haben. Wenn Sie zwischen einer weißen Linie mit einer schwarzen gestrichelten Linie darüber und einer schwarzen Linie mit einer weißen gestrichelten Linie über jedem Rahmen wechseln, sollten Sie den gewünschten Effekt erhalten. – WarrenFaith

0

Konnten Sie irgendeine Form von zwei 9patch Bildern als ein Hintergrundrahmen um die Bilddatei verwenden, die Sie darstellen möchten, eine in jedem von zwei Layouts. Die Bilder würden sich hinsichtlich der Anordnung der gestrichelten Elemente unterscheiden. Vertauschen Sie die Ansichten schnell (möglicherweise benötigen Sie eine Verzögerung) und Sie erhalten möglicherweise den gewünschten Effekt. Ich weiß nicht, wie effektiv das wäre, wenn ich den Benutzer weiterhin die App benutzen lassen und die Batterie kauen könnte ...

+0

Zwei 9 Patch-Bilder in einer Animation zeichnungsfähig. Das könnte funktionieren und ist über XML machbar. Werde es versuchen. – hpique

+0

Nein. Funktioniert nicht. 9 Patch-Bilder wiederholen keine Muster, sondern strecken nur einen Teil des Bildes. – hpique

+0

Entschuldigung, was ich bekommen habe ist, dass Sie zwei Bilder im 9patch-Format erstellen. Sie müssen die Muster selbst erstellen, aber so, dass Sie, wenn Sie schnell zwischen ihnen wechseln würden, die Illusion erzeugen würden, dass sich die Striche bewegen. – Adriaan