91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

SurfaceView和普通view的區別及簡單使用

小億
71
2023-12-22 07:45:10
欄目: 編程語言

SurfaceView和普通View的區別主要體現在以下幾個方面:

  1. 渲染機制:SurfaceView通過使用獨立的繪圖線程,可以在后臺進行繪圖操作,而不會阻塞主線程。而普通的View只能在主線程中進行繪圖操作。
  2. 可見性:SurfaceView可以在不可見的情況下繼續渲染,而普通的View在不可見時會停止繪制。
  3. 繪制方式:SurfaceView使用雙緩沖機制,可以避免閃爍問題,而普通的View在繪制過程中可能會出現閃爍。
  4. 控件層級:SurfaceView位于窗口層級的最頂層,可以覆蓋其他View,而普通的View則按照布局層級進行繪制。

使用SurfaceView時,一般需要自定義一個繼承自SurfaceView的類,并實現SurfaceHolder.Callback接口,重寫方法來控制繪制操作。具體步驟如下:

  1. 創建一個自定義的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() {
        // 繪制操作
    }
}
  1. 在Activity或Fragment中使用MySurfaceView。
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的繪制操作。

0
固镇县| 遵义市| 岳普湖县| 遂昌县| 报价| 万源市| 溧阳市| 达日县| 峡江县| 乃东县| 鸡泽县| 彰武县| 防城港市| 安新县| 黎城县| 镇平县| 兴业县| 西平县| 崇义县| 黑河市| 西城区| 嘉义县| 新兴县| 孝感市| 乌兰浩特市| 大姚县| 尤溪县| 股票| 漳浦县| 礼泉县| 抚州市| 安西县| 民权县| 离岛区| 九江县| 阿图什市| 宁安市| 贵州省| 大埔区| 丰台区| 屏南县|