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);
}
}