SurfaceView和普通View的區別主要體現在以下幾個方面:
使用SurfaceView時,一般需要自定義一個繼承自SurfaceView的類,并實現SurfaceHolder.Callback接口,重寫方法來控制繪制操作。具體步驟如下:
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
public MySurfaceView(Context context) {
super(context);
init();
}
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// surface創建時調用
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// surface尺寸變化時調用
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// surface銷毀時調用
}
public void drawSomething() {
// 繪制操作
}
}
public class MainActivity extends AppCompatActivity {
private MySurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surface_view);
}
@Override
protected void onResume() {
super.onResume();
// 在這里開始繪制
surfaceView.drawSomething();
}
@Override
protected void onPause() {
super.onPause();
// 在這里停止繪制
}
}
需要注意的是,繪制操作一般需要在SurfaceHolder.Callback的surfaceCreated方法中開始,在surfaceDestroyed方法中停止。并且,為了避免內存泄漏,需要在Activity或Fragment的生命周期方法中正確地管理SurfaceView的繪制操作。