1. Layout
File: main.xml
2. Java Code:
File: DRAWTURTLEActivity.java
package us.blackturtle.drawturtle; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import android.graphics.*; import android.graphics.Paint.Style; public class DRAWTURTLEActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new Panel(this)); } class Panel extends SurfaceView implements SurfaceHolder.Callback{ private TurtleThread turtthread; int startx; int starty; int sleepytime; int currcolor; Paint paint; Path tail, backleg, frontleg, head; public Panel(Context context){ super(context); getHolder().addCallback(this); turtthread = new TurtleThread(getHolder(), this); startx=40; starty=250; currcolor=Color.MAGENTA; } @Override public void onDraw(Canvas canvas){ paint = new Paint(); paint.setStyle(Style.FILL); paint.setColor(Color.BLACK); canvas.drawRect(0,0,canvas.getWidth(), canvas.getHeight(), paint); paint.setStyle(Style.STROKE); paint.setColor(currcolor); paint.setStrokeWidth(3); int offsetx=0; int offsety=0; for(int sets=6; sets>1; sets--){ offsetx=13*(6-sets); for(int i=0; i canvas.getWidth() - 100) startx=10; else startx+=5; if(startx<120){ turtthread.setSleep(300); currcolor=Color.YELLOW; } else if(startx<240){ turtthread.setSleep(100); currcolor=Color.BLUE; } else if(startx<360){ turtthread.setSleep(50); currcolor=Color.MAGENTA; } else{ turtthread.setSleep(200); currcolor=Color.CYAN; } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){ //stub } @Override public void surfaceCreated(SurfaceHolder holder){ turtthread.setRunning(true); turtthread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder){ boolean retry = true; turtthread.setRunning(false); while(retry){ try{ turtthread.join(); retry = false; }catch(InterruptedException e) { // repeat until successful } } } } class TurtleThread extends Thread{ private SurfaceHolder sHolder; private Panel sPanel; private boolean srun = false; int sleepytime; public TurtleThread(SurfaceHolder surfaceHolder, Panel panel){ sHolder = surfaceHolder; sPanel = panel; sleepytime=100; } public void setRunning(boolean run){ srun = run; } public void setSleep(int s){ sleepytime= s; } @Override public void run(){ Canvas c; while(srun){ c=null; try{ Thread.sleep(sleepytime); }catch(InterruptedException ie){} try{ c = sHolder.lockCanvas(null); synchronized(sHolder){ sPanel.onDraw(c); } }finally{ if(c != null){ sHolder.unlockCanvasAndPost(c); } } } } } }
Screen Shot: