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<Card> 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.