SurfaceView 绘制会有独立窗口, TextureView 没有独立的窗口,可以像普通的 View 一样,更高效更方便
xml:
<TextureView
android:id="@+id/texture"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Java:
tv = (TextureView) findViewById(R.id.texture);
// 监听 Surface
tv.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
//surface 创建成功
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
drawContent();
}
//surface 大小发生变化
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
//surface 被销毁
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
//surface 更新
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
画内容
private void drawContent(){
//锁定画布
Canvas canvas = tv.lockCanvas();
//画内容
canvas.drawColor(Color.WHITE);
paint.setColor(Color.RED);
canvas.drawCircle(200,300,100,paint);
tv.unlockCanvasAndPost(canvas);
}
注意: TextureView 使用时需要开启硬件加速
在AndroidManifest.xml
//对整个应用开启
<application
android:hardwareAccelerated="true">
</application>
//单个 Activity 开启
<activity
android:hardwareAccelerated="true">
</activity>