2017-01-02 1 views
0

Ich arbeite an einer App, wo ich auf einem Teil des Bildschirms eine animierte Musik Personal haben muss. Das ist:Wahl der Zeichnungs- und Animationstechnik für eine animierte Musik Mitarbeiter

  • 5 statische Linien
  • Ein Dutzend von Musiknoten (jeder ist im Grunde ein Oval und eine Linie)
  • Einige zusätzliche Symbole (clefs)

Ich muss eine haben präzise Kontrolle über die Größe jedes Elements, und müssen Position und Alpha der Noten und Notenschlüssel so animieren, dass die Noten sich von rechts nach links bewegen (auf der linken Seite des Bildschirms verschwinden und auf der rechten Seite erscheinen, also die Alpha)). Ich muss auch manchmal die Farbe der Noten ändern.

Ich denke, ich kann nicht Standard "Animationen" -Klasse verwenden, da es eine endlose Animation mit der Geschwindigkeit und den Noten abhängig von Echtzeitfaktoren ist.

Also was ist/sind die beste (n) Art und Weise dies zu tun und eine glatte Animation zu erreichen?

Verschiedene Ansichten? (VectorDrawables?) Single SurfaceView, wo ich manuell jede Form in jedem Frame zeichne? (Oder TextureView?)

(Hinweis: Mindest API ist auf 15)

Vielen Dank für mir helfen, die richtige Technik der Wahl.

Antwort

0

Sie liegen also falsch, wenn die Animationsklasse unendlich ist. Es muss nicht sein. Aber alles in Android hängt von realen Faktoren ab - Android ist kein RTOS (Echtzeit-Betriebssystem), es gibt keine Garantie für die Ausführungszeit.

Wenn Sie jedoch unbedingt die totale Kontrolle benötigen, würde ich einfach zur totalen Kontrolle springen - haken Sie den Choreographen so ein, dass Sie alle 1/60 Sekunden einen Anruf erhalten, und jeder Rahmen Ihre Sicht (en) ungültig macht und zeichne sie neu. Wenn das Telefon aus irgendwelchen Gründen wie andere Apps langsam läuft, können Sie einen Frame löschen oder etwas langsamer als 1/60 Sekunde laufen, aber das ist so nah wie möglich (und was Animations-Klassen im Hintergrund verwenden).

+0

Vielen Dank, aber ich bin nicht falsch bei den Animationen, ich sagte das genaue Gegenteil: nie gesagt Animationen sind unendlich, ich sagte, ich brauche eine Art endlose Animation und so kann ich sie nicht verwenden, sind sie nicht. –

+0

Und was ich über Echtzeit gesagt habe, ist, dass ich, wenn ich die Animation starte, nicht in der Lage bin zu wissen, wie meine Animation ein paar Sekunden später aussehen wird. Daher kann ich diese Klassen nicht verwenden, weil ich nicht weiß wie Die Animation muss sich abhängig von Faktoren entwickeln, die ich nicht im Voraus kenne. –

+0

Für den letzten Teil, gute Idee, aber besser, separate Ansichten oder eine Zeichnung Dinge in einem SurfaceView zu verwenden? –

0

Mit Animatoren können Sie reibungslos um 5 verschiedene Ansichten im Durchschnitt Telefon zu animieren. In Ihrem Fall (mit Dutzenden von Notizen und so weiter) wird es etwa 10 fps haben. Etwas besser wird also SurfaceView und Handdrawing sein. Vielleicht GLSurfaceView ist eine Überlegung wert. Um dies zu testen, empfehle ich Ihnen, zunächst eine Test-App zu erstellen, in der 10 Ansichten herumfliegen und die Leistung betrachten.

+0

Danke.Aber warum sollten Animatoren benötigt werden? Ich muss nur die Position und das Alpha der Ansichten festlegen, also sollte eine Grundeigenschaft ausreichen, nicht wahr? –

+0

Vielleicht bin ich nicht klar: Ich möchte keinen Animator verwenden, meine Frage ist: ist es besser, verschiedene Ansichten zu verwenden, sie ungültig zu machen und ihre Position zu ändern, oder ein einzelnes SurfaceView (oder TextureView) zu verwenden. –

+0

@ Stéphane Ich wette, Sie würden etwas wie ValueAnimator verwenden, um einen Wert leicht zu ändern. Aber selbst wenn Sie nur Werte von Hand schreiben, können Sie es nicht oft tun. Wie Gabe Sechan schon erwähnt hat, werden Sie mit den Einschränkungen der Choreographen nicht fertig werden. Auch wenn Sie die Position einiger Ansichten ändern, kann dies zu einem Relayout der übergeordneten Ansicht führen und die übergeordnete Ansicht usw. ändern. Es wird die Leistung leicht reduzieren. Außerdem ist es einfach besser, keine Views zu verwenden, um die Dinge ständig zu aktualisieren (30 fps == viele Updates). – Ekalips

Verwandte Themen