Como alterar o índice no OptionSelector imediatamente (sem animação)? [fechadas]

16

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!

Aaron Hastings
fonte
Poderia nos fornecer apenas o código suficiente para reproduzir seu problema? O vídeo é útil, claro, mas é muito difícil para ajudá-lo sem um trecho de código para reutilização (Veja sscce.org )
Sylvain Pineau
Oi Sylvain. Desculpe pelo atraso. Aqui está um arquivo QML que você pode usar para testar. Basta criar um novo projeto Ubuntu Simple UI e substituir seu arquivo QML principal por este: pastebin.ubuntu.com/9534780
Aaron Hastings

Respostas:

0

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.

Martin Owens -doctormo-
fonte