Surface是Android中用于绘制图像和进行视图渲染的一个重要的核心类。它提供了一个绘图的画布,可以在其上进行图像操作和显示。
SurfaceView是一个可以在后台线程中进行图像绘制的自定义视图。它继承自View,但是和普通的View不同,SurfaceView有自己的Surface,并且可以在后台线程中进行绘制操作,而普通的View只能在UI线程中绘制。这个特点使得SurfaceView适用于需要进行复杂绘制或者频繁刷新的场景,比如游戏开发、视频播放等。
SurfaceHolder是SurfaceView中用于管理Surface的一个接口。它提供了很多方法用于控制Surface的状态和属性,比如设置Surface的像素格式、获取Surface的宽高等。通过SurfaceHolder,我们可以得到Surface对象,并且可以通过SurfaceHolder来操作Surface,进行绘制、锁定、解锁等操作。
下面是SurfaceView和SurfaceHolder的常用方法的介绍:
1. SurfaceView常用方法:
- surfaceCreated(SurfaceHolder holder):当SurfaceView创建时被调用。
- surfaceChanged(SurfaceHolder holder, int format, int width, int height):当SurfaceView的尺寸变化时被调用。
- surfaceDestroyed(SurfaceHolder holder):当SurfaceView销毁时被调用。
2. SurfaceHolder常用方法:
- lockCanvas():获取一个画布对象,可以在此画布上进行绘制操作。
- unlockCanvasAndPost(Canvas canvas):将绘制完毕的画布提交显示。
- getSurface():获取当前的Surface对象。
- addCallback(SurfaceHolder.Callback callback):添加一个SurfaceHolder的回调接口。
- setType(int type):设置Surface的类型,比如设置为透明、半透明等。
使用SurfaceView和SurfaceHolder的示例代码如下:
```java
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private SurfaceHolder mSurfaceHolder;
private Thread mThread;
private boolean mIsRunning;
public MySurfaceView(Context context) {
super(context);
initView();
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Surface创建时被调用
mIsRunning = true;
mThread = new Thread(this);
mThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// Surface尺寸变化时被调用
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Surface销毁时被调用
mIsRunning = false;
try {
mThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (mIsRunning) {
Canvas canvas = null;
try {
canvas = mSurfaceHolder.lockCanvas();
// 在canvas上进行绘制操作
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null) {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
```
这是一个使用SurfaceView和SurfaceHolder来进行图像绘制的自定义视图类。在surfaceCreated方法中启动一个线程,然后在线程中通过lockCanvas获取一个画布对象进行绘制,绘制完成后通过unlockCanvasAndPost将画布提交显示。
总结:Surface是Android中用于绘制图像和进行视图渲染的核心类,SurfaceView是一个可以在后台线程中进行图像绘制的自定义视图,SurfaceHolder是SurfaceView中用于管理Surface的接口。通过使用SurfaceView和SurfaceHolder,我们可以实现复杂的图像绘制和视图渲染操作。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复