package com.example; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.os.Bundle; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.util.ArrayList; public class MyActivity extends Activity { /** * Called when the activity is first created. */ public boolean _run = false; Panel pnl; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); pnl = new Panel(this); setContentView(pnl); } class Panel extends SurfaceView implements SurfaceHolder.Callback { private TutorialThread _thread; public Panel(Context context) { super(context); getHolder().addCallback(this); _thread = new TutorialThread(getHolder(), this); setFocusable(true); } @Override public boolean onTouchEvent(MotionEvent event) { synchronized (_thread.getSurfaceHolder()) { if (event.getAction() == MotionEvent.ACTION_MOVE) { } if (event.getAction() == MotionEvent.ACTION_DOWN) { } if (event.getAction() == MotionEvent.ACTION_UP) { } return true; } } @Override public void onDraw(Canvas canvas) { canvas.drawColor(Color.BLACK); Paint mPaint = new Paint(); //int color = 0xaf000000; mPaint.setColor(Color.WHITE); mPaint.setStrokeWidth(2); canvas.drawText("something", 50, 50, mPaint); } @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) { // simply copied from sample application LunarLander: // we have to tell thread to shut down & wait for it to finish, or else // it might touch the Surface after we return and explode boolean retry = true; _thread.setRunning(false); while (retry) { try { _thread.join(); retry = false; } catch (InterruptedException e) { // we will try it again and again... } } } } class TutorialThread extends Thread { private SurfaceHolder _surfaceHolder; private Panel _panel; //public boolean _run = false; public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) { _surfaceHolder = surfaceHolder; _panel = panel; } public void setRunning(boolean run) { _run = run; } public SurfaceHolder getSurfaceHolder() { return _surfaceHolder; } @Override public void run() { Canvas c; while (_run) { try{ Thread.sleep(100); }catch(Exception x){} c = null; try { //if(drawn == false) { //]drawn = true; try{ c = _surfaceHolder.lockCanvas(null); synchronized (_surfaceHolder) { _panel.onDraw(c); } }catch (Exception cc) { cc.toString(); } } } 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) { _surfaceHolder.unlockCanvasAndPost(c); } } //catch (Exception cx) // {} } } } }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)