SurfaceView源代码
时间: 2023-08-02 18:10:28 浏览: 50
以下是SurfaceView的简单实现,仅供参考:
```java
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder surfaceHolder;
private Paint paint;
private Thread thread;
private boolean isRunning;
public MySurfaceView(Context context) {
super(context);
init();
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
paint = new Paint();
paint.setColor(Color.RED);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
isRunning = true;
thread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
draw();
}
}
});
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isRunning = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void draw() {
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawCircle(100, 100, 50, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
```
在这个实现中,我们通过实现 `SurfaceHolder.Callback` 接口来监听 `SurfaceView` 的生命周期。在 `surfaceCreated` 方法中启动一个线程来不断绘制一个圆形,并在 `surfaceDestroyed` 方法中停止线程。
在 `draw` 方法中,我们通过 `lockCanvas` 方法获取画布对象,然后在画布上绘制一个圆形,并通过 `unlockCanvasAndPost` 方法将画布提交到 `SurfaceView` 上进行显示。
请注意,在实际开发中,我们应该使用双缓冲技术来避免出现屏幕闪烁等问题。