SurfaceView
时间: 2023-08-16 18:22:40 浏览: 140
SurfaceView是Android中的一个视图控件,它可以在一个单独的线程中进行绘制操作,可以用来实现一些需要高性能绘制的场景,比如游戏开发、视频播放等。相比于普通的View控件,SurfaceView的优势在于它可以避免UI线程被阻塞,提高了UI的流畅度和响应性。同时,SurfaceView也提供了一些更底层的API,可以对绘制过程进行更加精细的控制。
在使用SurfaceView时,通常需要创建一个继承自SurfaceView的子类,并在其中实现SurfaceHolder.Callback接口。SurfaceHolder.Callback接口包含三个方法:surfaceCreated、surfaceChanged和surfaceDestroyed,分别用于处理SurfaceView的创建、改变和销毁事件。
下面是一个简单的SurfaceView代码示例:
```java
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private Paint mPaint;
public MySurfaceView(Context context) {
super(context);
init();
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 在这里进行绘制操作
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawRect(100, 100, 200, 200, mPaint);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// SurfaceView的大小发生改变时调用
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// SurfaceView销毁时调用
}
}
```
在上面的代码中,我们创建了一个名为MySurfaceView的SurfaceView子类,并在其中实现了SurfaceHolder.Callback接口。在init方法中,我们获取SurfaceHolder对象并注册Callback回调,同时创建一个Paint对象用于绘制。
在surfaceCreated方法中,我们使用SurfaceHolder.lockCanvas方法获取一个Canvas对象,并在其上进行绘制操作,最后使用SurfaceHolder.unlockCanvasAndPost方法提交绘制结果。这样就可以在SurfaceView上绘制出一个红色的矩形。
阅读全文