summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2010-04-26 13:00:19 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-04-26 13:00:19 -0700
commita91200d57b83fd7fbff91163aeaa0de11e04de92 (patch)
treeaa4c5de1f74f2d1a852f4dc1468d9845724a1578 /src
parente25ce444b88ec040365ce4ea44df2330024e756b (diff)
parent2762dd856ef95b3c5cb1f554fb733e15b1eb2a9c (diff)
downloadandroid_packages_apps_Trebuchet-a91200d57b83fd7fbff91163aeaa0de11e04de92.tar.gz
android_packages_apps_Trebuchet-a91200d57b83fd7fbff91163aeaa0de11e04de92.tar.bz2
android_packages_apps_Trebuchet-a91200d57b83fd7fbff91163aeaa0de11e04de92.zip
am 2762dd85: Fix bug 2629457 - Scale home screen settle animation based on distance.
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/Workspace.java30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index b85b12c83..907e835e8 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -42,7 +42,7 @@ import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewParent;
-import android.view.animation.OvershootInterpolator;
+import android.view.animation.Interpolator;
import android.widget.Scroller;
import android.widget.TextView;
@@ -119,6 +119,28 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
private Drawable mPreviousIndicator;
private Drawable mNextIndicator;
+ private WorkspaceOvershootInterpolator mScrollInterpolator;
+
+ private static class WorkspaceOvershootInterpolator implements Interpolator {
+ private static final float DEFAULT_TENSION = 2.f;
+ private float mTension;
+
+ public WorkspaceOvershootInterpolator() {
+ mTension = DEFAULT_TENSION;
+ }
+
+ public void setDistance(int distance) {
+ mTension = distance > 0 ? DEFAULT_TENSION / distance : DEFAULT_TENSION;
+ }
+
+ public float getInterpolation(float t) {
+ // _o(t) = t * t * ((tension + 1) * t + tension)
+ // o(t) = _o(t - 1) + 1
+ t -= 1.0f;
+ return t * t * ((mTension + 1) * t + mTension) + 1.0f;
+ }
+ }
+
/**
* Used to inflate the Workspace from XML.
*
@@ -154,7 +176,8 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
*/
private void initWorkspace() {
Context context = getContext();
- mScroller = new Scroller(context, new OvershootInterpolator());
+ mScrollInterpolator = new WorkspaceOvershootInterpolator();
+ mScroller = new Scroller(context, mScrollInterpolator);
mCurrentScreen = mDefaultScreen;
Launcher.setScreen(mCurrentScreen);
LauncherApplication app = (LauncherApplication)context.getApplicationContext();
@@ -917,10 +940,11 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag
final int newX = whichScreen * getWidth();
final int delta = newX - mScrollX;
- final int duration = screenDelta != 0 ? screenDelta * 300 : 300;
+ final int duration = screenDelta != 0 ? 200 + screenDelta * 100 : 300;
awakenScrollBars(duration);
if (!mScroller.isFinished()) mScroller.abortAnimation();
+ mScrollInterpolator.setDistance(screenDelta);
mScroller.startScroll(mScrollX, 0, delta, 0, duration);
invalidate();
}