Nella mia applicazione React Native ho alcune tessere (avvolte in un View
per l'esempio) che sono metà della larghezza della larghezza totale. Agiscono come pulsanti e scorrono verso il lato opposto per aprire un menu. Quando eseguo un gesto di sfioramento e rilascio il dito prima che la diapositiva raggiunga la sua posizione finale, voglio che la diapositiva si animi alla sua posizione finale "aperta". L'animazione dovrebbe iniziare con l'ultima velocità del gesto di tocco per ottenere un'impressione senza intoppi.React Native: continua l'animazione con l'ultima velocity del gesto di tocco
Ho implementato diverse varianti ma non ho trovato una buona soluzione (È possibile trovare il mio test-component in my GitHub repository). Il mio View
ha un PanResponder
per gestire il gesto e ottenere la velocità. Ho iniziato a utilizzare la libreria Animated
, ma i metodi forniti non risolvono il mio problema. L'unico metodo in cui posso passare una velocità iniziale per l'animazione è lo decay
, ma non posso passare un parametro dove l'animazione dovrebbe fermarsi. Con un'animazione timing
posso impostare un valore finale, ma non posso passare una velocità iniziale (quindi l'animazione inizia con una velocità di 0 che sembra molto nervosa). Ho provato a combinare questi due metodi, ma questo non funziona correttamente.
Su iOS, potrei utilizzare uno ScrollView
orizzontale con pagingEnabled
, che mostra l'effetto desiderato, ma non ho la funzionalità su Android.
Qualche idea su come posso risolvere questo problema e mostrare un'animazione fluida, che inizia con una velocità iniziale e termina in una data posizione, al termine dei gesti tattili?
Grazie per il vostro aiuto!
EDIT ho aggiunto il link al mio ultimo componente di prova ...
La proprietà pagingEnabled in ScrollView per Android è supportata da 0.28, è possibile aggiornare il nativo reattivo e vedere se questo risolve il problema? – Doppio
Sono sicuro che non vuoi questa risposta, ma calcolare la velocità dalla posizione è facile. Quindi memorizzare "currentVelocity" come punti che ti vengono forniti dovrebbe essere facile. – GantMan