package com.drawbridge.utils; import com.drawbridge.Activity; /** * Animates a change between views * * @author Alistair Stead * */ public class ScrollTween implements Runnable { private int mStartPosition; private int mFinishPosition; private Activity mParent; private static ScrollTween mInstance = null; public boolean mEnabled = false; private TransitionType mTransitionType; public enum ScrollDirection { FORWARD, BACKWARD } public enum TransitionType { CUBIC, LINEAR } public static ScrollTween getInstance(Activity parent, int startPosition, int finishPosition, TransitionType mTransitionType) { if (mInstance == null) { mInstance = new ScrollTween(parent, startPosition, finishPosition, mTransitionType); } else{ mInstance.mTransitionType = mTransitionType; mInstance.mParent = parent; mInstance.mStartPosition = startPosition; mInstance.mFinishPosition = finishPosition; } return mInstance; } private ScrollTween(Activity parent, int startPosition, int targetPosition, TransitionType mTransitionType) { this.mTransitionType = mTransitionType; mParent = parent; mStartPosition = startPosition; mFinishPosition = targetPosition; mEnabled = false; } @Override public void run() { long startTime = System.currentTimeMillis(); long timeLength = 1000; long currentTime; int difference = mFinishPosition - mStartPosition; while((currentTime = System.currentTimeMillis()) < startTime + timeLength){ int elapsedTime = (int) (currentTime - startTime); double A = difference / (8 + Math.cbrt(timeLength / 2)); Utils.out.println("" + (int) (A * (8 + Math.cbrt(elapsedTime - (timeLength / 2))))); // Cubic transition int pos = 0; switch(mTransitionType){ case CUBIC: pos = mStartPosition + (int) (A * (8 + Math.cbrt(elapsedTime - (timeLength / 2)))); break; case LINEAR: default: pos = (int) (mStartPosition + (((double)elapsedTime/(double)timeLength) * difference)); break; } mParent.getScrollPane().getHorizontalScrollBar().setValue(pos); try { Thread.sleep(25); } catch (InterruptedException e) { e.printStackTrace(); } } Utils.out.println("start:" + mStartPosition + " end:" + mFinishPosition); mParent.getScrollPane().getHorizontalScrollBar().setValue(mFinishPosition); } }