Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Tutorial2D3 extends Activity {
- Panel panel;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- panel = new Panel(this);
- setContentView(panel);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(1, 1, 1, "Clean Canvas");
- return super.onCreateOptionsMenu(menu);
- }
- @Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- panel.cleanCanvas();
- return true;
- }
- class Panel extends SurfaceView implements SurfaceHolder.Callback {
- TutorialThread thread;
- Bitmap icon;
- int iconWidth;
- int iconHeight;
- int touchX;
- int touchY;
- int mCount = 0;
- public Panel(Context context) {
- super(context);
- icon = BitmapFactory
- .decodeResource(getResources(), R.drawable.icon);
- iconWidth = icon.getWidth();
- iconHeight = icon.getHeight();
- getHolder().addCallback(this);
- thread = new TutorialThread(getHolder(), this);
- setFocusable(true);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- int x = touchX - (iconWidth / 2);
- int y = touchY - (iconHeight / 2);
- if(mCount>0) {
- canvas.drawColor(Color.BLACK);
- mCount--;
- }
- canvas.drawBitmap(icon, (x > 0 ? x : 0), (y > 0 ? y : 0), null);
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
- // TODO Auto-generated method stub
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- thread.setRunning(true);
- thread.start();
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- boolean retry = true;
- thread.setRunning(false);
- do {
- try {
- thread.join();
- retry = false;
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- } while (retry);
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- touchX = (int) event.getX();
- touchY = (int) event.getY();
- break;
- case MotionEvent.ACTION_MOVE:
- touchX = (int) event.getX();
- touchY = (int) event.getY();
- break;
- case MotionEvent.ACTION_UP:
- break;
- default:
- break;
- }
- return true;
- }
- private void cleanCanvas() {
- mCount = 2;
- }
- }
- class TutorialThread extends Thread {
- private SurfaceHolder _surfaceHolder;
- private Panel _panel;
- private boolean _run = false;
- public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) {
- _surfaceHolder = surfaceHolder;
- _panel = panel;
- }
- public void setRunning(boolean run) {
- _run = run;
- }
- @Override
- public void run() {
- Canvas c;
- while (_run) {
- c = null;
- try {
- c = _surfaceHolder.lockCanvas(null);
- synchronized (_surfaceHolder) {
- _panel.onDraw(c);
- }
- } finally {
- if (c != null) {
- _surfaceHolder.unlockCanvasAndPost(c);
- }
- }
- }
- }
- }
- @Override
- public void run() {
- while (mRun) {
- Canvas c = null;
- try {
- c = mSurfaceHolder.lockCanvas(Rectangle);
- synchronized (mSurfaceHolder) {
- if (mMode == STATE_RUNNING) updatePhysics();
- doDraw(c);
- }
- } finally {
- // do this in a finally so that if an exception is thrown
- // during the above, we don't leave the Surface in an
- // inconsistent state
- if (c != null) {
- mSurfaceHolder.unlockCanvasAndPost(c);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment