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.