Canvas scroll


#1

I am writing a solitaire app. I use a canvas to draw everything on the
screen. Sometimes a pile of cards will get big and extend below the
bottom of the screen. I would like to make the canvas scrollable so
the user can access those cards.

Main Activity.
Java:

package com.maulinpathare.solitaire;

public class Solitaire extends Activity{
/** Called when the activity is first created. */
private Context mContext;
private GameView mG;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = this;
    setContentView(R.layout.main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, 1, 0, R.string.newGame);
    menu.add(0, 2, 0, R.string.exitGame);
    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 1:
      mG = new GameView(this);
      setContentView(mG);
        return true;
    case 2:
        finish();
        return true;
    }
    return false;
}

}//end class

GameView Class
This is where everything happens
I have removed most of the game logic…
Java:

package com.maulinpathare.solitaire;

public class GameView extends ScrollView implements OnTouchListener{
private Deck mD;
private boolean mInit, mDone;
private Stack mPile1, mPile2, mPile3, mPile4, mPile5,
mPile6, mPile7,
mOpenPile, mEndPile1, mEndPile2,
mEndPile3, mEndPile4, mTemp;
private Canvas mCanvas;
private int mPile;
private boolean mPickUp, mVictory;
private Card mCard;
private final int mSpacing = 22;
private Paint rectPaint, wonPaint1, wonPaint2;

 public GameView(Context context) {
    super(context);
                //initialize everything needed for the game
}

@Override
protected void onDraw(Canvas canvas) {
 mCanvas = canvas;
 if(mInit){
      initialize();
      mInit = false;
 }
    //draw stuff...

}//end onDraw

public boolean onTouch(View v, MotionEvent event){
 int eventAction = event.getAction();
 int x = Math.round(event.getX());
 int y = Math.round(event.getY());

 switch(eventAction){
 case MotionEvent.ACTION_DOWN:
                //check if touch has happened on one of the card

piles
break; //end case action_touch

 case MotionEvent.ACTION_MOVE:
                //if card touched move it
      break; //end case action_move

 case MotionEvent.ACTION_UP:
                //check if legal move has been made
      break; //end case action_up

 }//end switch(event)

 invalidate();
 return true;
}//end onTouch

}

Where and how should I implement screen scrolling? I would like the
user to be able to slide their finger across the screen in the
direction they want to scroll.