private void move() { scaleInc = (targetScale - startScale) / duration; final PointF frictionAcc = new PointF(transInc.x, transInc.y); frictionAcc.x *= -friction/transInc.length()/2; frictionAcc.y *= -friction/transInc.length()/2; if(friction != 0) { motionEndTime = motionStartTime + (long)(transInc.length() / friction); } mHandler.post(new Runnable() { public void run() { long t = System.currentTimeMillis(); if(t > motionEndTime) t = motionEndTime; long spent = t - motionStartTime; double phase = Math.PI * spent / (motionEndTime - motionStartTime) ;