什么时候使用SurfaceView?
当 自定义的View 需要频繁更新,刷新的数据量 大的时候,SurfaceView是通过子线程来进行刷新的。
SurfaceView如何使用?
SurfaceView在 使用时,有一套可供参考的模板,大部分的SurfaceView绘图操作都可套用这个模板。
public class MySurfaceView extends SurfaceView
implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder holder;
private boolean isDrawing;
private Canvas canvas;
public MySurfaceView(Context context) {
this(context, null);
}
public MySurfaceView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
//初始化
private void init() {
holder = getHolder();
holder.addCallback(this);
holder.setFormat(PixelFormat.RGB_565);
//
setFocusable(true);
setFocusableInTouchMode(true);
setKeepScreenOn(true);
}
//绘制
private void draw() {
canvas = holder.lockCanvas();
//进行 绘制
//todo
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
//---------------
@Override
public void surfaceCreated(SurfaceHolder holder) {
isDrawing = true;
//启动 子线程
new Thread(this).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isDrawing = false;
}
@Override
public void run() {
while (isDrawing) {
draw();
}
}
}