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.

    // 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.3

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

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

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

Building

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

    cd $REBOUND_CHECKOUT

    # build the core java library
    ./gradlew rebound-core:assemble

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

    # build the Android distribution Jar
    ./gradlew reboundDistJar

    # install the simple example app
    ./gradlew installExample

    # install the origami example app
    ./gradlew installOrigamiExample
    
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.

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
Rebound is used for a magnification effect when extracting an image for sharing and also when the additional information panel appears.

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.