TextureView中的onDraw不可被重写怎样处理,写出代码
时间: 2023-12-10 20:42:01 浏览: 28
当使用 TextureView 时,我们可以通过 SurfaceTextureListener 来监听 SurfaceTexture 的状态变化,并在回调方法中进行绘制操作。
以下是一个基本的示例代码:
```java
public class MyTextureView extends TextureView implements SurfaceTextureListener {
private Paint mPaint;
public MyTextureView(Context context) {
super(context);
init();
}
public MyTextureView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyTextureView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setSurfaceTextureListener(this);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.RED);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Canvas canvas = lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.drawCircle(width / 2f, height / 2f, 100, mPaint);
unlockCanvasAndPost(canvas);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// do nothing
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
// do nothing
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// do nothing
}
}
```
在这个示例中,我们重写了 TextureView 的 SurfaceTextureListener 四个方法。当 SurfaceTexture 可用时,我们可以通过 lockCanvas() 方法获取一个 Canvas 对象,在上面进行绘制操作,然后通过 unlockCanvasAndPost() 方法将 Canvas 对象提交到 TextureView 中。当 SurfaceTexture 的大小改变、被销毁或更新时,我们也需要重写对应的方法来执行必要的操作。
需要注意的是,在 TextureView 中,onDraw() 方法不可被重写,因为 TextureView 是一个基于 OpenGL ES 实现的 View,它的绘制方式与普通的 View 不同。