Laden...

Ziffernblatt/Zeigeranzeige - animierte Änderung von Value?

Erstellt von 7.e.Q vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.537 Views
7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren
Ziffernblatt/Zeigeranzeige - animierte Änderung von Value?

Hi Leute,

ich hab gerade schon wieder so'n Geistesblitz. Wie erreicht man in WPF, daß die Änderung beispielsweise einer Property "Value" in einem als analoge Zeigeranzeige (Tachometer, Aussteuerungsanzeige etc.) konzipierten Control nicht in einer sprunghaften Positionsänderung des Zeigers, sondern sauber animiert dargestellt wird? Der Zeiger soll also flüssig (evtl. easeIn und easeOut) vom alten zum neuen Wert "wandern".

Wie macht man sowas?

Danke!

Grüße,
Hendrik

C
980 Beiträge seit 2003
vor 16 Jahren

Stichwort zur Weitersuche: DoubleAnimation (System.Windows.Media.Animation Namespace).

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Okay, danke, das funktioniert soweit schon ganz klasse. Was mich jetzt interessieren würde... wie erreiche ich damit eine "natürliche" Bewegung eines Zeigers? Ich meine die Beschleunigung und die Verzögerung samt Trägheit (also dieses "über das Ziel hinausschießen" und das Einpendeln auf den Zielwert)?

Jemand 'ne Idee?

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Ahhh... mit dem Completed-Event von DoubleAnimation funktioniert das gut. Einfach den Zeiger in der ersten Animation etwas weiter fahren, als zum Zielpunkt und erst im Completed-Event mit einer neuen DoubleAnimation an den gewünschten Zielpunkt zurück fahren. Sieht gut aus. 🙂

6.862 Beiträge seit 2003
vor 16 Jahren

Aber "natürlich" ist dieses Verhalten nicht gg
Solche analogen Zeiger werden ja mit ner Feder zurückgestellt und das ist so dimensioniert das die im aperiodischen Grenzfall zurückschwingt, da man gerade so ein Verhalten wie du beschreibst nicht will 😉

Baka wa shinanakya naoranai.

Mein XING Profil.

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Aber "natürlich" ist dieses Verhalten nicht gg
Solche analogen Zeiger werden ja mit ner Feder zurückgestellt und das ist so dimensioniert das die im aperiodischen Grenzfall zurückschwingt, da man gerade so ein Verhalten wie du beschreibst nicht will 😉

Gut, das kann man sehen, wie man will. Ob's dem natürlichen Verhalten eines Zeigers entspricht oder nicht, ist für meine Experimentierfreude egal. Sicher, das natürliche Verhalten eines Zeigers in einem Messinstrument wäre eine sanfte Verzögerung hin zum Zielpunkt. Mir geht's aber in erster Linie einfach um's "Machen". Beispielsweise der Sekundenzeiger auf der Vista Sidebar Uhr weist ein ähnliches Verhalten auf. Der schwingt auch erst ein Stückchen zu weit, um dann im richtigen Moment zur "angesteuerten" Sekunde zurück zu drehen... Wie auch immer...

... es funktioniert jedenfalls, wie ich es mir vorstelle. 🙂

Interessant wäre ein wirklich "natürliches" Verhalten aber auch noch. Also wie würde man das denn realisieren? Was müsste ich tun, um ein solch sanftes Ausdrehen des Zeigers zu erhalten?

6.862 Beiträge seit 2003
vor 16 Jahren

Die WPF Animationen haben Properties wie AccelerationRatio und Deceleration Ratio - denke damit wirst du glücklich.

Baka wa shinanakya naoranai.

Mein XING Profil.

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Stimmt. Sieht gut aus. 🙂

Nun fehlt mir noch 'ne Möglichkeit, bei einer Änderung des "Value" des Controls, welche eine Richtungsänderung des Zeigers zur Folge hätte, die laufende Animation nicht zu unterbrechen, was zu einer abrupten Richtungsänderung des Zeigers führt, sondern den Zeiger quasi entsprechend seiner simulierten "Masse" zu bremsen und gleichermaßen in die andere Richtung zu beschleunigen.Oder, falls der neue Wert in der gleichen Richtung liegt, wie der aktuell anzusteuernde, die Bewegung des Zeigers nicht zu unterbrechen, sondern der Animation einfach "im laufenden Betrieb" den neuen Zielwert zuzuweisen.

Ideen?

C
980 Beiträge seit 2003
vor 16 Jahren

Versuch mal die Animation mit HandoffBehavior.Compose zu starten. Und generell mit relativen Änderungen statt absoluten (By statt From/To).

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Also mit HandoffBehavior.Compose sieht das gut aus. Aber warum mit relativen Werten, statt mit absoluten? Mit absoluten Werten funktioniert's soweit ganz gut.

C
980 Beiträge seit 2003
vor 16 Jahren

Wenn es auch mit absoluten geht, perfekt - macht es einfacher 🙂

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 16 Jahren

Schick... Ich arbeite dran.

Mir fehlt nun noch die Skala... (anderer Thread). Das kriege ich noch nicht hin.