Rebound
Spring Animations for Android
About

Rebound is a java library that models spring dynamics. Rebound spring models can be used to create animations that feel natural by introducing real world physics to your application.

Rebound is not a general purpose physics library; however, spring dynamics can be used to drive a wide variety of animations. The simplicity of Rebound makes it easy to integrate and use as a building block for creating more complex components like pagers, toggles, and scrollers.

Rebound uses the same spring constants as Origami making it easy to convert Origami interaction mockups directly into your Android application.

Usage

Here's a simple example of using a Spring model to drive scaling animation on a View. Check out the API reference to learn more.

// Create a system to run the physics loop for a set of springs.
SpringSystem springSystem = SpringSystem.create();

// Add a spring to the system.
Spring spring = springSystem.createSpring();

// Add a listener to observe the motion of the spring.
spring.addListener(new SimpleSpringListener() {

  @Override
  public void onSpringUpdate(Spring spring) {
    // You can observe the updates in the spring
    // state by asking its current value in onSpringUpdate.
    float value = (float) spring.getCurrentValue();
    float scale = 1f - (value * 0.5f);
    myView.setScaleX(scale);
    myView.setScaleY(scale);
  }
});

// Set the spring in motion; moving from 0 to 1
spring.setEndValue(1);
Demo

Press and release the photo to toggle a Spring from zero to one and observe the spring model drive a scaling animation. This demo is built using a JavaScript port of Rebound.

Press and Hold
Download

To include Rebound in your project, grab the latest prebuilt Jar file. ↓ Download Jar v0.3.8

Alternatively you can include Rebound from Maven Central via Gradle or Maven.

// Gradle dependency on Rebound
dependencies {
  compile 'com.facebook.rebound:rebound:0.3.8'
}

<!-- Maven dependency on Rebound -->
<dependency>
  <groupId>com.facebook.rebound</groupId>
  <artifactId>rebound</artifactId>
  <version>0.3.8</version>
</dependency>

Building

You can use the included Gradle wrapper to build Rebound libraries and sample applications locally as well. Check out the code at github.com/facebook/rebound.

cd $REBOUND_CHECKOUT

# install the Rebound playground app
./gradlew installPlayground

# build the Android distribution Jar
./gradlew reboundDistJar

# run core library tests
./gradlew rebound-core:check
Support

Join the discussion over at facebook.com/groups/rebound.lib to report bugs, request features or show off your project and follow @rebound_lib on twitter for project updates.

Who is using Rebound?

Open an issue on Github if you are using Rebound in production and would like to be added to this list.

Flow
Flow is building a fun interactive personality into its productivity focused interface.

Evernote
Evernote uses Rebound to drive the spring animation behind its floating "New Note" button.

Mirage
Mirage uses Rebound for smooth animations on Android. Check out the hamburger menu to X animation when swiping on the contact panel.

Slingshot
Slingshot uses Rebound for most of its animations including the photo stack and camera pull down animation.

Skitch
Skitch added beautiful animations to its annotation toolbox control using Rebound.

LinkedIn
LinkedIn uses Rebound to create bouncy animations for button press states in its Android app.

Inflikr
Inflikr app use Rebound to drive most of its animations like photo pager, swipe up for detail, swipe to dismiss, sharing...

Jelly
Jelly's Android app uses Rebound to drive its playful animations.

Perka
Perka used Rebound to create a realtime dashboard with bouncy animations in HTML5 to highlight their mobile loyalty card application.

Home
Facebook Home uses Rebound to drive all the animations for features like Cover Feed and Chat Heads.

License

BSD License

For Rebound software

Copyright (c) 2013, Facebook, Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.