今天因为下午编程太累了,就想总结一下之前了解过的surfaceview,结果,唉,运行的结果总是在意料之外,好在最后终于调试好了,还是贴代码吧,感觉代码和注解才是真爱
package com.jk.surfaceview;
import java.util.Random;
import android.R.color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurface extends SurfaceView {
//declare a surfaceHolder object
SurfaceHolder holder;
public MySurface(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
//get a holder
holder = getHolder();
//add a callback event
holder.addCallback(new Callback() {
RenderThread render;
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// let the thread dead
render.isrun = false;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//init a thread and start the thread
render = new RenderThread();
render.isrun = true;
render.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
}
});
}
public MySurface(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// TODO Auto-generated constructor stub
}
public MySurface(Context context) {
this(context, null);
// TODO Auto-generated constructor stub
}
public void hua(Canvas canvas) {
//full the canvas
canvas.drawARGB(255, 255, 0,0 );
Paint paint=new Paint();
//draw a rect
canvas.drawRect(1, 1, 100, 100, paint);
}
class RenderThread extends Thread {
//set the isrun is false
public boolean isrun = false;
@Override
public void run() {
super.run();
while (isrun) {
//though the holder to lock the canvas
Canvas canvas = holder.lockCanvas();
//begin to draw
hua(canvas);
//unlock the canvas and post the content
holder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
然后,这个的用法就和view的用法一样。。。可以回去休息了