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
Stichwort zur Weitersuche: DoubleAnimation (System.Windows.Media.Animation Namespace).
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?
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. 🙂
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.
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?
Die WPF Animationen haben Properties wie AccelerationRatio und Deceleration Ratio - denke damit wirst du glücklich.
Baka wa shinanakya naoranai.
Mein XING Profil.
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?
Versuch mal die Animation mit HandoffBehavior.Compose zu starten. Und generell mit relativen Änderungen statt absoluten (By statt From/To).
Also mit HandoffBehavior.Compose sieht das gut aus. Aber warum mit relativen Werten, statt mit absoluten? Mit absoluten Werten funktioniert's soweit ganz gut.
Wenn es auch mit absoluten geht, perfekt - macht es einfacher 🙂
Schick... Ich arbeite dran.
Mir fehlt nun noch die Skala... (anderer Thread). Das kriege ich noch nicht hin.