No meu aplicativo, eu uso um OptionSelector para escolher uma lista de estações de bicicleta. Eu também tenho um componente de mapa com marcadores para cada estação.
Quando toco em um marcador de local, ele também altera o OptionSelector para o índice da estação correspondente, pois esse é um bom UX.
O que não é bom no UX é como o OptionSelector responde a essa alteração no índice, que está se animando como se tivesse sido tocada pelo dedo do usuário. Em outras palavras, muito tempo depois que o usuário tocou no marcador do mapa e recebeu todas as informações necessárias, o OptionSelector ainda está "girando" para o índice da estação.
Aqui está um vídeo demonstrando esse comportamento: https://www.youtube.com/watch?v=jXKWlAmNYsw
Gostaria que este OptionSelector alterasse seu índice imediatamente, sem animação. Existe uma maneira de fazer isso?
Aqui está como eu atualmente faço as coisas. Estou mais do que feliz em ser corrigido se esta for a maneira errada de fazer isso. Eu uso um WorkerScript (um segmento QML, mais ou menos) para fazer chamadas de API. Quando este WorkerScript retorna, move o OptionSelector da seguinte maneira:
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.
*/
}
}
Qualquer ajuda ou insight apreciado - saúde!
fonte
Respostas:
Você pode ver uma cópia do qml OptionSelector aqui, ele usa o UbuntuNumberAnimation quando não é expandido. Não há opção para desativá-lo e, se o recurso for necessário, você terá que fazer um patch upstream e esperar um pouco pelas novas versões da biblioteca.
Porém, você pode criar seu próprio widget seletor aberto, remover a parte da animação e renomeá-lo para uso em seu código. Eu recomendo esta rota.
fonte