2011年10月31日 星期一

Android: Writing a Simple 2D Program.

1. Create a new Project.

2. Add a new View (SurfaceView) Class. (File -> New -> Class)


3. Add Constructor in the new Class.
 public Panel(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }

4. Change Activity
 setContentView(R.layout.main);
to your new Class
 setContentView(new Panel(this));

5a. Add the onDraw for View
@Override
public void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);
    canvas.drawBitmap(mBitmap, 10, 10, null);
}

5b. Add the Callback interface and Thread for SurfaceView
public class Panel extends SurfaceView implements SurfaceHolder.Callback {
 private AnimationThread mThread;
 
 public Panel(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
     getHolder().addCallback(this);
     mThread = new AnimationThread(this);
 }
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // TODO Auto-generated method stub
    }
 
     @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
         if (!mThread.isAlive()) {
             mThread = new AnimationThread(this);
             mThread.setRunning(true);
             mThread.start();
         }
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        if (mThread.isAlive()) {
            mThread.setRunning(false);
        }
    }
    public void doDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
    }
}
public class AnimationThread extends Thread {
 public AnimationThread() {
  // TODO Auto-generated constructor stub
 }
    private Panel mPanel;
    private SurfaceHolder mHolder;
    private boolean mRun = false;

    public AnimationThread(Panel panel) {
        mPanel = panel;
        mHolder = mPanel.getHolder();
    }

    public void setRunning(boolean run) {
        mRun = run;
    }

    @Override
    public void run() {
        Canvas canvas = null;
        while (mRun) {
            canvas = mHolder.lockCanvas();
            if (canvas != null) {
                mPanel.doDraw(canvas);
                mHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

沒有留言:

張貼留言