Я пытаюсь запустить несколько простых анимаций с использованием библиотеки react-native-animatable
. (Но я считаю, что вопрос должен быть общим для любой анимации реакции, поэтому добавьте и другие теги.)
Проблема в том, что в первый раз изображение анимируется так, как и ожидалось. Но когда целью является запуск второй анимационной анимации с помощью жеста, перевод изображения начинается с исходных координат.
Результат поиска, в разработке Android (что, очевидно, не в моем случае), кажется, метод setFillAfter
, который устанавливает координаты после анимации.
Мой вопрос заключается в том, как установить местоположение (например, значения left / top) для конечной переведенной точки, чтобы последовательная анимация начиналась с точки, оставленной предыдущим переводом.
Экспо-закуска для блока кода ниже здесь .
import * as React from 'react';
import { Image, StyleSheet, ImageBackground } from 'react-native';
import * as Animatable from 'react-native-animatable';
import { PanGestureHandler, State } from 'react-native-gesture-handler';
import testImg from './test.png';
import backImg from './back.png';
export default class App extends React.Component {
onTestMove(event) {
this.testAnimRef.transitionTo({
translateX: event.nativeEvent.translationX,
translateY: event.nativeEvent.translationY,
}, 0);
}
render() {
return (
<ImageBackground source={backImg} style={{ flex: 1 }} >
<PanGestureHandler
key={`test`}
onGestureEvent={(e) => { this.onTestMove(e) }}
onHandlerStateChange={e => { }}
>
<Animatable.View style={styles._animatable_view}
ref={((ref) => { this.testAnimRef = ref }).bind(this)}
useNativeDriver={true}
>
<Image source={testImg} style={styles._image} />
</Animatable.View>
</PanGestureHandler>
</ImageBackground>
);
}
}
const styles = StyleSheet.create({
_image: {
width: 50,
height: 25,
resizeMode: 'contain',
backgroundColor: 'black',
borderColor: 'gainsboro',
borderWidth: 2,
},
_animatable_view: {
position: "absolute",
top: 200,
left: 100,
},
});