OSDN Git Service

android-2.1_r1 snapshot
[android-x86/packages-apps-Gallery2.git] / src / com / cooliris / media / FloatAnim.java
diff --git a/src/com/cooliris/media/FloatAnim.java b/src/com/cooliris/media/FloatAnim.java
new file mode 100644 (file)
index 0000000..e6de41e
--- /dev/null
@@ -0,0 +1,63 @@
+package com.cooliris.media;
+
+import android.util.FloatMath;
+
+public final class FloatAnim {
+    private float mValue;
+    private float mDelta;
+    private float mDuration;
+    private long mStartTime;
+
+    public FloatAnim(float value) {
+        mValue = value;
+        mStartTime = 0;
+    }
+
+    public boolean isAnimating() {
+        return mStartTime != 0;
+    }
+
+    public float getTimeRemaining(long currentTime) {
+        float duration = (currentTime - mStartTime) * 0.001f;
+        if (mDuration > duration) // CR: braces
+            return mDuration - duration;
+        else
+            return 0.0f;
+    }
+
+    public float getValue(long currentTime) {
+        if (mStartTime == 0) {
+            return mValue;
+        } else {
+            return getInterpolatedValue(currentTime);
+        }
+    }
+
+    public void animateValue(float value, float duration, long currentTime) {
+        mDelta = getValue(currentTime) - value;
+        mValue = value;
+        mDuration = duration;
+        mStartTime = currentTime;
+    }
+
+    public void setValue(float value) {
+        mValue = value;
+        mStartTime = 0;
+    }
+
+    public void skip() {
+        mStartTime = 0;
+    }
+
+    private float getInterpolatedValue(long currentTime) {
+        float ratio = (float) (currentTime - mStartTime) * 0.001f / mDuration;
+        if (ratio >= 1f) { // CR: 1.0f
+            mStartTime = 0;
+            return mValue;
+        } else {
+            ratio = 0.5f - 0.5f * FloatMath.cos(ratio * 3.14159265f); // CR:
+                                                                      // (float)Math.PI
+            return mValue + (1f - ratio) * mDelta;
+        }
+    }
+}