Skip to content

Transitions

In this guide, you will learn how to implement basic animated transitions to the View and Rescaler components.

Width transition

Rescaler component handles the animations of its children automatically as long as transition field is defined. When the scene updates, the component will animate the transition between the original state and the new one.

function App() {
const [beforeTransition, setBeforeTransition] = useState(true);
useEffect(() => {
setTimeout(() => setBeforeTransition(false), 2000);
}, []);
return (
<View style={{ backgroundColor: "#4d4d4d" }}>
<Rescaler
style={{ width: beforeTransition ? 480 : 1280 }}
transition={{ durationMs: 2000 }}>
<InputStream inputId="input_1" />
</Rescaler>
</View>
)
}

Sibling component transitions

If there are two sibling Rescaler components and only one of them has a width transition applied, the layout of the other will be adjusted automatically.

function App() {
const [beforeTransition, setBeforeTransition] = useState(true);
useEffect(() => {
setTimeout(() => setBeforeTransition(false), 2000);
}, []);
return (
<View style={{ backgroundColor: "#4d4d4d" }}>
<Rescaler
style={{ width: beforeTransition ? 480 : 1280 }}
transition={{ durationMs: 2000 }}>
<InputStream inputId="input_1" />
</Rescaler>
<Rescaler>
<InputStream inputId="input_2" />
</Rescaler>
</View>
)
}

Customizing interpolation functions

All the examples above utilize the default linear interpolation; however, you can also choose from other available modes.

function App() {
const [beforeTransition, setBeforeTransition] = useState(true);
useEffect(() => {
setTimeout(() => setBeforeTransition(false), 2000);
}, []);
const top = beforeTransition ? 0 : 540;
return (
<View style={{ backgroundColor: "#4d4d4d" }}>
<Rescaler
style={{ width: 320, height: 180, top, left: 0 }}
transition={{ durationMs: 2000 }}>
<InputStream inputId="input_1" />
</Rescaler>
<Rescaler
style={{ width: 320, height: 180, top, left: 320 }}
transition={{ durationMs: 2000, easingFunction: 'bounce' }}>
<InputStream inputId="input_2" />
</Rescaler>
<Rescaler
style={{ width: 320, height: 180, top, left: 640 }}
transition={{
durationMs: 2000,
easingFunction: {
functionName: 'cubic_bezier',
points: [0.65, 0, 0.35, 1],
},
}}>
<InputStream inputId="input_3" />
</Rescaler>
<Rescaler
style={{ width: 320, height: 180, top, left: 960 }}
transition={{
durationMs: 2000,
easingFunction: {
functionName: 'cubic_bezier',
points: [0.33, 1, 0.68, 1],
},
}}>
<InputStream inputId="input_4" />
</Rescaler>
</View>
);
}