In meiner App verwende ich einen OptionSelector, um aus einer Liste von Fahrradstationen auszuwählen. Ich habe auch eine Kartenkomponente mit Ortsmarkierungen für jede Station.
Wenn ich auf einen Ortsmarker tippe, ändert sich auch der OptionSelector in den Index der entsprechenden Station, da dies eine gute UX ist.
Was nicht gut ist UX ist, wie der OptionSelector auf diese Indexänderung reagiert, die sich selbst animiert, als ob sie vom Finger des Benutzers bewegt worden wäre. Mit anderen Worten, lange nachdem der Benutzer auf die Kartenmarkierung getippt und alle erforderlichen Informationen erhalten hat, "dreht" sich der OptionSelector immer noch zum Index der Station.
Das folgende Video zeigt dieses Verhalten: https://www.youtube.com/watch?v=jXKWlAmNYsw
Ich möchte, dass dieser OptionSelector seinen Index sofort ohne Animation ändert. Gibt es eine Möglichkeit, dies zu tun?
So mache ich momentan Dinge. Ich bin mehr als froh, korrigiert zu werden, wenn dies die falsche Vorgehensweise ist. Ich verwende ein WorkerScript (mehr oder weniger ein QML-Thread), um API-Aufrufe zu tätigen. Wenn dieses WorkerScript zurückgegeben wird, verschiebt es den OptionSelector folgendermaßen:
WorkerScript {
id: queryStationsWorker
source: "../js/getstations.js"
onMessage: {
[...]
// Move the OptionSelector to the corresponding station's index.
stationSelector.selectedIndex = getLastStationIndex(lastStation.contents.stationName, stationsModel)
/*
* For the sake of clarity:
*
* getLastStationIndex() is a function which just returns an integer.
* lastStation is a U1DB database used for state saving.
* stationsModel is a model containing all of the stations.
*/
}
}
Jede Hilfe oder Einsicht wird gebeten - Prost!
quelle
Antworten:
Sie können eine Kopie des OptionSelector qml sehen hier es UbuntuNumberAnimation verwendet , wenn es nicht erweitert wird . Es gibt keine Möglichkeit, es auszuschalten. Wenn die Funktion erforderlich ist, müssen Sie Upstream-Patches ausführen und eine Weile auf neue Versionen der Bibliothek warten.
Sie können jedoch Ihr eigenes Open-Selector-Widget erstellen, den Animationsteil entfernen und sicherstellen, dass Sie ihn zur Verwendung in Ihrem Code umbenennen. Ich empfehle diese Route.
quelle