Maybe this will help you.
I made a arcade space shooter and I have quick responses to key events and smooth movement of shots/enemys/etc.
I implemented a Timer that starts each time the canvas is shown and stopps when canvas is hidden.
When the Timer is started you can define the interval in which the run() method of TimerTask is executed, and each time run() is executed it calls the canvas' paint() method. interval = 1000/(Frames per second) I have 15 Frames/second and it looks smoth.
Code:
Canvas.showNotify(){
startFrameTimer();
}
Canvas.hideNotify{
stoppFrameTimer();
}
stoppFrameTimer(){
iTimer.cancel();
}
startFrameTimer(){
iTimer = new Timer();
iTimerTask = new TimerTask{
public void run(){
repaint();
}
};
iTimer.schedule(iTimerTask, interval, interval);
}