summaryrefslogtreecommitdiff
path: root/same-android/src/main/java/com/orbekk/GameView.java
diff options
context:
space:
mode:
Diffstat (limited to 'same-android/src/main/java/com/orbekk/GameView.java')
-rw-r--r--same-android/src/main/java/com/orbekk/GameView.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/same-android/src/main/java/com/orbekk/GameView.java b/same-android/src/main/java/com/orbekk/GameView.java
new file mode 100644
index 0000000..047955a
--- /dev/null
+++ b/same-android/src/main/java/com/orbekk/GameView.java
@@ -0,0 +1,89 @@
+package com.orbekk;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+
+public class GameView extends SurfaceView implements SurfaceHolder.Callback {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+ private GameThread thread;
+
+ static class GameThread extends Thread {
+ private int height = 0;
+ private int width = 0;
+ private int posX;
+ private int posY;
+ private SurfaceHolder holder;
+ private Context context;
+ private Paint paint;
+
+ public GameThread(SurfaceHolder holder, Context context) {
+ this.holder = holder;
+ this.context = context;
+ paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setARGB(255, 255, 0, 0);
+ }
+
+ public void setSize(int width, int height) {
+ synchronized(holder) {
+ this.width = width;
+ this.height = height;
+ }
+ }
+
+ private void doDraw(Canvas c) {
+ c.drawCircle(100.0f, 50.0f, 20.0f, paint);
+ }
+
+ @Override public void run() {
+ Canvas c = null;
+ try {
+ c = holder.lockCanvas();
+ synchronized(holder) {
+ doDraw(c);
+ }
+ } finally {
+ holder.unlockCanvasAndPost(c);
+ }
+ }
+ }
+
+ public GameView(Context context) {
+ super(context);
+ getHolder().addCallback(this);
+ thread = new GameThread(getHolder(), context);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ Paint paint = new Paint();
+ paint.setARGB(255, 255, 0, 0);
+ canvas.drawCircle(50.0f, 50.0f, 50.0f, paint);
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width,
+ int height) {
+ logger.info("SurfaceChanged(w={}, h={})", width, height);
+ thread.setSize(width, height);
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ logger.info("SurfaceCreated()");
+ thread.start();
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ logger.info("SurfaceDestroyed()");
+ // TODO: Stop thread.
+ }
+
+}