Skip to main content
Version: 1.13.0

First animation

To build your first animation you will need to use two hooks: useKeyboardAnimation or useReanimatedKeyboardAnimation.

Both of them return an object with two properties: progress and height (depends on the hook used, values will be Animated.Value or Reanimated.SharedValue).

info

useKeyboardAnimation returns Animated values with enabled Native Driver (useNativeDriver: true). Thus some properties can not be animated, such as height, backgroundColor, etc.

caution

useReanimatedKeyboardAnimation works only with SharedValues, i.e. it is not compatible with Reanimated v1 API.

Example

To see how to use these hooks let's consider example below (for more comprehensive usage you may find an example app useful):

import React from "react";
import { Animated, StyleSheet, TextInput, View } from "react-native";
import { useKeyboardAnimation } from "react-native-keyboard-controller";

const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "flex-end",
},
box: {
width: 60,
height: 60,
marginVertical: 20,
},
row: {
flexDirection: "row",
},
});

export default function KeyboardAnimation() {
// 1. we need to use hook to get an access to animated values
const { height, progress } = useKeyboardAnimation();

const scale = progress.interpolate({
inputRange: [0, 1],
outputRange: [1, 2],
});

return (
<View style={styles.container}>
<View style={styles.row}>
<Animated.View
style={{
width: 50,
height: 50,
backgroundColor: "#17fc03",
borderRadius: 15,
// 2. we can apply any transformations we want
transform: [{ translateY: height }, { scale }],
}}
/>
</View>
<TextInput
style={{
width: "100%",
marginTop: 50,
height: 50,
backgroundColor: "yellow",
}}
/>
</View>
);
}
info

If you are going to use these Animated values in class components (i.e. without hooks) - you can easily do it. Check out source code - this hook simply changes softInputMode and consumes Context. Also you may read architecture deep dive to understand more about how this library works.