Android 使用一个 surface 画图
时间: 2024-02-22 08:57:05 浏览: 157
深入理解Surface系统
好的,下面是一个简单的使用SurfaceView绘制图形的Android示例程序:
首先,在XML布局文件中定义一个SurfaceView:
```xml
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
然后,在Java代码中创建SurfaceView类并实现SurfaceHolder.Callback接口:
```java
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private Paint paint;
private boolean isDrawing;
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
holder = getHolder();
holder.addCallback(this);
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
isDrawing = false;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
isDrawing = true;
new Thread(new Runnable() {
@Override
public void run() {
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
canvas.drawCircle(100, 100, 50, paint);
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
}).start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isDrawing = false;
}
}
```
在这个例子中,我们创建了一个自定义视图MySurfaceView,实现了SurfaceHolder.Callback接口。在构造函数中,我们获取SurfaceHolder对象,并设置为回调接口。在surfaceCreated方法中,我们创建一个线程,在线程中获取Canvas对象并绘制一个圆形。在surfaceDestroyed方法中,我们停止绘制线程。
这个例子只是一个简单的使用SurfaceView绘制图形的示例,你可以根据自己的需求和应用场景进行更加复杂和丰富的图形绘制。同时需要注意的是,在使用SurfaceView绘制图形时,需要考虑线程同步和资源释放的问题。
阅读全文