1. SurfaceView
package com.example.test;
import java.util.Random;
import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
*
* @author Luv
*
*/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private SurfaceHolder sHolder;
private Canvas canvas;
private int widthScreen, heightScreen;
private Thread thread;
private boolean flag;
public MySurfaceView(Context context) {
super(context);
sHolder = getHolder();
sHolder.addCallback(this);
}
public void draw() {
try {
canvas = sHolder.lockCanvas();
//draw something
Random r = new Random();
canvas.drawRGB(r.nextInt(256), r.nextInt(256), r.nextInt(256));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null) {
sHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
public void run() {
while (flag) {
long start = System.currentTimeMillis();
//do something...or draw()
draw();
long end = System.currentTimeMillis();
long sleep = 50 - end + start;
try {
if (sleep>0) {
Thread.sleep(sleep);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
heightScreen = getHeight();
widthScreen = getWidth();
thread = new Thread(this);
thread.start();
flag = true;
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
flag = false;
}
}