1. You can use a simple drawImage, just make sure your sprite is a png with transparent background. Also you will have to clear the area the sprite is leaving (repaint the background on it), again using drawImage and also setClip. These are all methods of the Graphics class of course.
2. Are you making sure to subtract the size of the sprite. If a sprite can't leave the screen then it's top left coordinate should be smaller than (getWidth - sprite.width) and (getHeight - sprite.height).
3. There are exactly the methods you need. They are called keyPressed and keyReleased (in the Canvas class). Set up a boolean flag on keyPressed and reset it on keyReleased:
Code:
private boolean goingLeft;
protected void keyPressed(int keyCode) {
if (getGameAction(keyCode) == Canvas.LEFT)
goingLeft = true;
}
protected void keyReleased(int keyCode) {
if (getGameAction(keyCode) == Canvas.LEFT)
goingLeft = false;
}
// and use some timed method where you check the flag and
// move the sprite according:
private void someTimedMethod() {
if (goingLeft)
sprite.left--;
}