简介:
SurfaceView相对于View来说性能更高,画任何东西的时候,先画到内存,一次性移致到屏幕上,一般游戏中常用。
通过案例讲解SurfaceView:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class CustomView extends SurfaceView
implements Callback{
//声明
SurfaceHolder surfaceHolder;
Thread thread;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
surfaceHolder=this.getHolder();
surfaceHolder.addCallback(this);//接口指向实现类,回调,保证surfaceCreated()等方法运行
}
//控件创建时执行(起线程放入到surfaceCreated里面)
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
thread=new Thread(new MyThread());
thread.start();
}
//接口:传过来屏幕发生变化后的宽度和高度
@Override
public void surfaceChanged
(SurfaceHolder holder,
int format,
int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return super.onTouchEvent(event);
}
class MyThread implements Runnable
{
@Override
public void run() {
while(true)
{
Canvas canvas=surfaceHolder.lockCanvas();
try {
Paint paint=new Paint();
paint.setColor(0xFFFF0000);
canvas.drawRect(0, 0, 100, 100, paint);
} catch (Exception e) {
}finally
{
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}