Come modificare immediatamente l'indice in OptionSelector (senza animazione)? [chiuso]


16

Nella mia app, utilizzo un OptionSelector per scegliere da un elenco di stazioni ciclabili. Ho anche un componente mappa con segnaposto per ogni stazione.

Quando tocco un segnaposto, cambia anche OptionSelector nell'indice della stazione corrispondente, poiché questa è una buona UX.

Ciò che non è buono UX è il modo in cui OptionSelector risponde a questo cambio di indice, che si sta animando come se fosse stato sfogliato dal dito dell'utente. In altre parole, molto tempo dopo che l'utente ha toccato l'indicatore della mappa e ha ricevuto tutte le informazioni di cui ha bisogno, OptionSelector sta ancora "ruotando" sull'indice della stazione.

Ecco un video che dimostra questo comportamento: https://www.youtube.com/watch?v=jXKWlAmNYsw

Vorrei che questo OptionSelector cambiasse immediatamente il suo indice, senza animazione. C'è un modo per fare questo?

Ecco come faccio attualmente le cose. Sono più che felice di essere corretto se questo è il modo sbagliato di farlo. Uso un WorkerScript (un thread QML, più o meno) per effettuare chiamate API. Quando questo WorkerScript ritorna, sposta OptionSelector in questo modo:

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.
         */
    }
}

Qualsiasi aiuto o approfondimento apprezzato - evviva!


Potresti fornirci il codice sufficiente per riprodurre il tuo problema? Il video è ovviamente utile, ma è abbastanza difficile aiutarti senza riutilizzare un frammento di codice (Vedi sscce.org )
Sylvain Pineau,

Ciao Sylvain. Scuse per il ritardo. Ecco un file QML che puoi usare per testare. Basta creare un nuovo progetto Ubuntu Simple UI e sostituire il file QML principale con questo: pastebin.ubuntu.com/9534780
Aaron Hastings,

Risposte:


0

Puoi vedere una copia di OptionSelector qml qui che usa UbuntuNumberAnimation quando non è espanso. Non è disponibile alcuna opzione per disattivarlo e, se è necessaria la funzione, dovrai applicare patch a monte e attendere un po 'per le nuove versioni della libreria.

Tuttavia, puoi creare il tuo widget selettore aperto, rimuovere la parte di animazione e assicurarti di rinominarla per l'uso nel tuo codice. Consiglio questo itinerario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.