Experiments with High Performance Animation in React Native

Three major methods for shape animation with React Native via @salesforceeng

  • This story is my experience and experiments to achieve high performance animation in React Native.Along the way I learned tons from these blogs and recommend you read them as you dive deeper into building your own animations in React Native:React Native Animations Using Animated API from Nader DabitReact Native ART and D3 from Harry WolffBefore we continue, I would like to define what “high performance animation” in terms of my project.
  • Note: There is another OpenGL binding for React Native which enables a more flexible OpenGL implementation without the interface.Animation in React NativeIn my exploration I tested three major methods (with some variations) for doing shape animation with React Native.
  • For example, if we have a shape with a 1px border, it cannot be transformed to have a larger width/height and retain the same border width without redrawing.Experiments and ResultsRequest Animation Frame + JavaScript tweeningThe first approach is to change nothing but use the same code from the web implementation — meaning everything is done in JavaScript without any help from React Native.
  • The gaps between each country will also get scaled so the transformed shapes are not the same as the new shapes.Zoom animation with fade in/outThis method has a significant impact on the memory footprint since there are two views with a shadow node per shape.Animated + Hybrid Native Driver + Animated Shape (ART)For this approach I still used the Native Driver while I found there is a trick to communicate between the JS thread and UI thread using setNativeProps.
  • I first tried with React Native ART and switched to React Native SVG while both give similar results.Animated + Hybrid Native Driver + Animated Shape (OpenGL)After realizing the bottleneck comes from re-drawing shapes, I switched to another library which has the drawing logic implemented in OpenGL.

Archiving decent animation performance is quite tricky. This story is my experience and experiments to achieve high performance animation in React Native.
Continue reading “Experiments with High Performance Animation in React Native”

React Native

React Native - How to create Twitter exploding hearts  #coding #softwaredev

  • Finally our opacity stays 1 until frame 9.99 (the end of our circle stroke) then we kill it on frame 10.
  • So from frame 10 to 12 it will spring up fast to 1.2 scale, and then slowly fall back from 1.2 to 1 from frames 12 to 18 .
  • We have the heart hidden after frame 1 , so what this animation says is at 0 , inital render, be gray.
  • Alright so we scale up, based on the image we scale up to .3 in a single frame, then over the course of 3 frames we scale up our circle to a scale of 1.
  • It’s essentially a way to make an animation not a whole frame, and or happen virtually immediately.

A blog of JavaScript techniques and tutorials. Including React, React Native, and anything else I feel like writing about.
Continue reading “React Native”