public class CanvasTest extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new CanvasView(this)); } } class CanvasView extends SurfaceView implements Callback,Runnable{ private Thread mThread; private Canvas mCanvas; private boolean mFlag; private Paint mPaint; private SurfaceHolder mSurfaceHolder; private PaintFlagsDrawFilter mPaintFlagsDrawFilter=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); public CanvasView(Context context) { super(context); mSurfaceHolder=this.getHolder(); mSurfaceHolder.addCallback(this); mPaint=new Paint(); mPaint.setAntiAlias(true); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { mFlag=true; mThread=new Thread(this,"My Thread"); mThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mFlag=false; } @Override public void run() { while (mFlag) { long start=System.currentTimeMillis(); myDraw(); logic(); long end=System.currentTimeMillis(); if ((end-start)<50) { try { Thread.sleep(50-(end-start)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private void logic() { // TODO Auto-generated method stub } private void myDraw() { try { mCanvas=mSurfaceHolder.lockCanvas(); if (mCanvas != null) { //Set the canvas drawing non-serrated mCanvas.setDrawFilter(mPaintFlagsDrawFilter); //Use fill color refresh mCanvas.drawColor(Color.WHITE); //Draw text mCanvas.drawText("DrawText", 10, 10, mPaint); //Draw pixel mCanvas.drawPoint(10, 20, mPaint); //Draw multiple pixels mCanvas.drawPoints(new float[]{10,30,30,30}, mPaint); //Draw line mCanvas.drawLine(10, 40, 50, 40, mPaint); //Draw multiple lines mCanvas.drawLines(new float[]{10,50,50,50,70,50,110,50}, mPaint); //Draw Rect mCanvas.drawRect(10, 60, 70, 100, mPaint); //Draw Rect Rect rect=new Rect(10, 110, 70, 150); mCanvas.drawRect(rect, mPaint); //Draw RoundRect RectF rectF=new RectF(10,160,70,200); mCanvas.drawRoundRect(rectF, 20, 20, mPaint); //Draw circle mCanvas.drawCircle(30, 230, 20, mPaint); //Draw Arc mCanvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, mPaint); //Draw oval mCanvas.drawOval(new RectF(150, 80, 180,100), mPaint); //Draw path Path path=new Path(); path.moveTo(150, 110); path.lineTo(200, 100); path.lineTo(200, 130); mCanvas.drawPath(path, mPaint); //Draw the specified path graph Path pathCicle=new Path(); pathCicle.addCircle(150, 180, 30, Direction.CCW);//Add a circle path mCanvas.drawTextOnPath("PathText", pathCicle, 10, 20, mPaint);//Draw the path of the text with graphics } } catch (Exception e) { // TODO: handle exception }finally{ if (mCanvas != null) { mSurfaceHolder.unlockCanvasAndPost(mCanvas); } } } }
