W mojej aplikacji używam OptionSelector do wybierania z listy stacji rowerowych. Mam również element mapy z oznaczeniami miejsc dla każdej stacji.
Po dotknięciu znacznika miejsca zmienia on także OptionSelector na indeks odpowiedniej stacji, ponieważ jest to dobry UX.
To, co nie jest dobre w UX, to to, jak OptionSelector reaguje na tę zmianę indeksu, która animuje się tak, jakby została poruszona palcem użytkownika. Innymi słowy, długo po tym, jak użytkownik dotknie znacznika mapy i otrzyma wszystkie potrzebne informacje, OptionSelector nadal „obraca się” na indeks stacji.
Oto film demonstrujący to zachowanie: https://www.youtube.com/watch?v=jXKWlAmNYsw
Chciałbym, aby ten OptionSelector natychmiast zmienił indeks bez animacji. Czy jest na to sposób?
Oto jak obecnie robię różne rzeczy. Bardzo się cieszę, że mogę to poprawić, jeśli jest to niewłaściwy sposób. Używam WorkerScript (wątek QML, mniej więcej) do wykonywania wywołań API. Kiedy ten WorkerScript powraca, przesuwa OptionSelector tak:
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.
*/
}
}
Doceniona jakakolwiek pomoc lub wgląd - na zdrowie!
źródło
Odpowiedzi:
Możesz zobaczyć kopię pliku qml OptionSelector tutaj, który używa UbuntuNumberAnimation, gdy nie jest rozwinięty. Nie ma opcji, aby ją wyłączyć, a jeśli ta funkcja jest wymagana, będziesz musiał załatać aktualizację i poczekać chwilę na nowe wersje biblioteki.
Możesz jednak utworzyć własny otwarty widget wyboru, usunąć część animacji i upewnić się, że zmieniłeś jej nazwę w celu użycia w kodzie. Polecam tę trasę.
źródło