package com.rutar.android.canvas; import android.view.*; import android.content.*; import android.graphics.*; /////////////////////////////////////////////////////////////////////////////// public class Android_Canvas extends SurfaceView implements SurfaceHolder.Callback { public static final int UPDATE_MAX = 1; public static final int UPDATE_HIGH = 10; public static final int UPDATE_NORMAL = 30; public static final int UPDATE_LOW = 60; private Draw_Thread thread; private long update_time = Android_Canvas.UPDATE_NORMAL; /////////////////////////////////////////////////////////////////////////////// public Android_Canvas (Context context) { super(context); getHolder().addCallback(this); } /////////////////////////////////////////////////////////////////////////////// @Override public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { } /////////////////////////////////////////////////////////////////////////////// @Override public void surfaceCreated (SurfaceHolder holder) { thread = new Draw_Thread(getHolder()); thread.set_Running(true); thread.start(); } /////////////////////////////////////////////////////////////////////////////// @Override public void surfaceDestroyed (SurfaceHolder holder) { boolean retry = true; thread.set_Running(false); while (retry) { try { thread.join(); retry = false; } catch (Exception e) {} } } /////////////////////////////////////////////////////////////////////////////// private class Draw_Thread extends Thread { private boolean running = false; private SurfaceHolder surfaceHolder; /////////////////////////////////////////////////////////////////////////////// public Draw_Thread (SurfaceHolder surfaceHolder) { this.surfaceHolder = surfaceHolder; } /////////////////////////////////////////////////////////////////////////////// public void set_Running (boolean running) { this.running = running; } /////////////////////////////////////////////////////////////////////////////// @Override public void run() { Canvas canvas; /////////////////////////////////////////////////////////////////////////////// while (running) { canvas = null; try { canvas = surfaceHolder.lockCanvas(null); if (canvas == null) { continue; } paint(canvas); } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } //try { sleep(update_time); } //catch (Exception e) {} } /////////////////////////////////////////////////////////////////////////////// } } /////////////////////////////////////////////////////////////////////////////// public void paint (Canvas canvas) { } /////////////////////////////////////////////////////////////////////////////// public void set_Update_Time (int time) { if (time >= Android_Canvas.UPDATE_MAX || time <= Android_Canvas.UPDATE_LOW) { update_time = time; } } /////////////////////////////////////////////////////////////////////////////// }